#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.