文字列を再帰的に連結する必要があり、問題が発生しました。再帰的な文字列連結
質問は、s(0) = 0, s(1) = 1, s(n) = s(n-1)s(n-2) for n >= 2
です。ここで、s(n)
は、前の2つの文字列の連結された文字列です。 (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が大きくなると一度起こって、私のコードに問題があるということですなぜ、私はこのエラー
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
を取得しますか?
ありがとうございました!
あなたは再帰的に固執したい場合(それが実際の割り当て可能性があるため)あなたの中の端末の状態を移動する必要があります再帰メソッド。そして、私を増やす代わりに、あなたはより低いレベルでnを減らすでしょう。 – eckes
[この優秀な答え](http://stackoverflow.com/a/7249552)の質問:[フィボナッチ文字列の個々の文字の決定?](http://stackoverflow.com/q/4896720) –