#javascript #recursion
#javascript #рекурсия
Вопрос:
Я решаю проблему рекурсии в JavaScript. Однако, когда первый оператор if имеет значение true, оператор return не завершает работу скрипта, что приводит к бесконечному циклу.
function steps(n, row = 0, col = 0, stair = '') {
if (row === n) {
return;
}
if (col >= n ) {
console.log(stair);
steps(n, row 1);
}
if (col <= row) {
stair = '#';
} else {
stair = ' ';
}
steps(n, row, col 1, stair)
}
Комментарии:
1. Как вы вызываете эту функцию?
Ответ №1:
Нет, проблема в том, что вы не возвращаетесь после своего первого рекурсивного вызова, поэтому он всегда будет также выполнять второй, и этот не увеличивается row
, так что это бесконечный цикл.
Это работает:
function steps(n, row = 0, col = 0, stair = '') {
if (row === n) {
return;
}
if (col >= n ) {
console.log(stair);
steps(n, row 1);
} else {
if (col <= row) {
stair = '#';
} else {
stair = ' ';
}
steps(n, row, col 1, stair)
}
}
// try it:
steps(5);
Ответ №2:
Спасибо, Кристиан, что указал, что я пропускаю возврат. Теперь это мой рабочий код:
function steps(n, row = 0, col = 0, stair = '') {
if (row === n) {
return 0;
}
if (col >= n ) {
console.log(stair);
steps(n, row 1);
return;
}
if (col <= row) {
stair = '#';
} else {
stair = ' ';
}
steps(n, row, col 1, stair)
}