Я работал над вопросом, который требует конкатенации строк рекурсивно и сталкивался с проблемой.Рекурсивная строка Конкатенация
Вопрос гласит, что 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
меньше или равно количеству символов в строке 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));
}
}
}
Это то, что я до сих пор, и это работает для данного образец тест случай. Он работает в большинстве случаев, но когда п становится большой, я получаю эту ошибку
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
Почему это происходит, и там что-то случилось с моим кодом?
Спасибо!
Если вы хотите придерживаться рекурсивный (потому что это может быть фактическое назначение), необходимо переместить терминальные условия внутри метод рекурсии. И вместо увеличения i вы уменьшаете n на более низких уровнях. – eckes
См. [Этот отличный ответ] (http://stackoverflow.com/a/7249552) на вопрос: [Определение отдельных букв строк Фибоначчи?] (Http://stackoverflow.com/q/4896720) –