【发布时间】:2016-09-13 18:13:24
【问题描述】:
我正在研究一个需要递归串联字符串的问题,但遇到了问题。
问题指出s(0) = 0, s(1) = 1, s(n) = s(n-1)s(n-2) for n >= 2,其中s(n) 是前两个字符串的串联字符串。
输入将指示(n, k) 对的多少实例将作为第一个整数输入,然后是包含非负整数的每一行
n (0 <= n <= 60) 和一个正整数 k。
输出应该是打印出连接字符串s(n)的第k个字符,其中k小于或等于字符串s(n)中的字符数。
s(0) = 0
s(1) = 1
s(2) = 10
s(3) = 101
s(4) = 10110
s(5) = 10110101
and so on.
示例输入:
3
5 2
0 1
4 3
输出:
0
0
1
我的代码:
import java.util.*;
public class recursivestring {
public static String recursive(int n, int i, String str1, String str2){
if (i == n - 1)
return str1 + str2;
return recursive(n, i + 1 , str1 + str2, str1);
}
public static void main(String[] args) {
int lines, i, n, k;
String result;
Scanner input = new Scanner(System.in);
lines = input.nextInt();
for (i = 0; i < lines; i++) {
n = input.nextInt();
k = input.nextInt();
if (n == 0) {
result = "0";
} else if (n == 1) {
result = "1";
} else if (n == 2) {
result = "10";
} else {
result = recursive(n, 2, "10", "1");
}
System.out.println(result.charAt(k-1));
}
}
}
这是我目前所拥有的,它适用于给定的示例测试用例。它适用于大多数情况,但是一旦 n 变大,我就会收到此错误
线程“主”java.lang.OutOfMemoryError 中的异常:Java 堆空间
为什么会这样?我的代码有问题吗?
谢谢!
【问题讨论】:
-
如果你想坚持使用递归(因为它可能是实际的赋值),你需要在递归方法中移动终端条件。而不是增加 i 你会减少 n 在较低的水平。