Выведите строку от n до 1 с помощью рекурсии

#javascript #recursion

Вопрос:

Я пытаюсь напечатать строку от числа n до 1, используя эту рекурсивную функцию:

 function numStr(n) {
    let outputStr = '';
    
    if (n === 1) {
        return outputStr   n;
    } else {
        outputStr   n;
        return numStr(n-1);
    }
}

console.log(numStr(5));    //should print 54321 

Я знаю, что изменение строк 7 и 8 для return outputStr n numStr(n-1) выполнения этой работы. Но я не могу понять, почему приведенный выше код работает не так, как ожидалось. Он печатает «1» во всех случаях.

Комментарии:

1. Вы пробовали пошагово выполнять код с помощью отладчика? Особенно эта строка outputStr n; может быть интересной.

2. Да, это была довольно тривиальная проблема. Наверное, я просто вел себя глупо и не обращал на это особого внимания. Я не вернул «Вывод». Спасибо.

Ответ №1:

Когда n!=1 тогда вы просто добавляете значение n в переменную ouputStr , но на самом деле не возвращаете это outputStr значение. Измените код на:

 function numStr(n) {
    if (n === 1) {
        return '1';
    } else {
        return n numStr(n-1);
    }
}

console.log(numStr(5));    //should print 54321 

Комментарии:

1. Как я этого не заметил! Огромное спасибо!

Ответ №2:

Я считаю, что область вывода определена неправильно. Каждый раз, когда вы вызываете numStr, outputStr сбрасывается в пустую строку, поэтому при возврате вы получаете только последнее значение outputStr, равное 1.

Ответ №3:

Вот еще одна рекурсия, которая будет работать:

 const numStr=n=>n>0?n numStr(--n):'';
console.log(numStr(5)); // 54321 

Становится ясно, что переменная outputString даже не нужна при правильной рекурсии.

Ответ №4:

Похоже, вы совершили простую ошибку, вы написали

 outputStr   n;
 

вместо

 outputStr = outputStr   n;
 

или

 outputStr  = n;
 

Комментарии:

1. Как бы это изменило результат?

2. Это все равно не сработает. Как ответил @WinterSoldier, я просто забыл вернуть строку, из-за которой в каждом случае возвращается только 1.