Рекурсивный вывод чисел

Рекурсивный возврат СТРОКИ, состоящей из последовательности от 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 шт):

Автор решения: Tiarait

Ошибка в том, что вы вызываете функцию с циклом внутри этого же цикла + пытаетесь присвоить тип (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;
}
→ Ссылка
Автор решения: Igor
    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)}]`);

→ Ссылка
Автор решения: vp_arth

Важно понять смысл рекурсивного метода.

  • Тривиальный случай: n = 1 -> выводим 1
  • Нетривиальный случай: n > 1 -> уменьшаем размер задачи

Представим, что задача для n-1 уже решена.
Что нужно будет сделать, чтобы задача для n была решена тоже? Добавить пробел и n.

Итого (не Java):

go(n):
  if (n == 1) return "1";
  return go(n-1) + " " + n;
→ Ссылка
Автор решения: Itюноша
public static String go(int n) {
    String result = "";
    int k = 1;
    while (n >= k) {
        result = result + " " + k;
        k++;
    }
    return result.trim();
}

Я думал что рекурсия это метод вызывающий сам себя. А здесь этого не видно. ОбЪясните пожалуйста что я не понимаю

→ Ссылка