Рекурсивный вывод чисел
Рекурсивный возврат СТРОКИ, состоящей из последовательности от 1 до n через пробел.
public class Recursion {
public static void main(String[] args) {
System.out.println(go(10));
}
public static String go(int n) {
String result = "";
while (n >= 0) {
--n;
result = result + "" + (char) n;
go(n - 1);
}
return result;
}
}
В чем ошибка ?
Ответы (4 шт):
Ошибка в том, что вы вызываете функцию с циклом внутри этого же цикла + пытаетесь присвоить тип (char) для переменной n. Вот рабочий код
public static String go(int n) {
String result = "";
while (n != 0) {
--n;
result = result + " " + n;
}
return result.trim();
}
А вот код для вашей задачи от 1 до n
public static String go(int n) {
String result = "";
int k = 1;
while (n >= k) {
result = result + " " + k;
k++;
}
return result.trim();
}
Или через цикл for
for (int i = 1; i <= n; i ++) {
result = result + " " + i;
}
UPD Рекурсивно
public static String go(int n) {
if (n == 1) {
return "1";
}
return go(n - 1) + " " + n;
}
while (n >= 0) {
--n;
result = result + "" + (char) n;
go(n - 1); // !!!
}
Это хрестоматийная ошибка, когда не используется результат рекурсивного вызова.
public static String go(int n) {
return (n > 1)? go(n - 1) + " " + Integer.toString(n) : "1";
}
function go(n) {
return (n > 1)? go(n - 1) + " " + n : "1";
}
console.log(`[${go(10)}]`);
Важно понять смысл рекурсивного метода.
- Тривиальный случай: n = 1 -> выводим 1
- Нетривиальный случай: n > 1 -> уменьшаем размер задачи
Представим, что задача для n-1 уже решена.
Что нужно будет сделать, чтобы задача для n была решена тоже? Добавить пробел и n.
Итого (не Java):
go(n):
if (n == 1) return "1";
return go(n-1) + " " + n;
public static String go(int n) {
String result = "";
int k = 1;
while (n >= k) {
result = result + " " + k;
k++;
}
return result.trim();
}
Я думал что рекурсия это метод вызывающий сам себя. А здесь этого не видно. ОбЪясните пожалуйста что я не понимаю