#javascript #algorithm #recursion
#javascript #алгоритм #рекурсия
Вопрос:
Это сводит меня с ума. Вот код :
function laugh(){
let counter = 10;
if(counter <= 0){
return;
}
else{
console.log('laugh');
counter--;
laugh()
}
}
Почему это дает мне бесконечный цикл, когда он должен печатать ‘laugh’ 10 раз?
Комментарии:
1. Вы должны определить
counter
вне функции. таким образом, его всегда 10.
Ответ №1:
Как и в других ответах, каждый laugh()
из них создал новый локальный счетчик.
Наиболее подходящий рекурсивный метод здесь — передать счетчик в качестве аргумента:
function laugh(counter){
if(counter <= 0){
return;
}
else{
console.log('laugh');
laugh(counter - 1) // subtract 1 from the counter and recur
}
}
laugh(10)
Это чисто функциональный подход, снижающий зависимость от глобальных переменных, на которые могут влиять другие функции. Как правило, это более безопасный способ программирования, чем использование глобальных переменных, когда вам это не нужно.
Ответ №2:
Вы определили счетчик внутри функции, поэтому он будет сбрасываться на 10 при каждом вызове функции.
let counter = 10;
function laugh(){
if(counter <= 0){
return;
}
else{
console.log('laugh');
counter--;
laugh();
}
}
laugh();
Ответ №3:
переменная counter
должна быть глобальной переменной. В этот момент, всякий раз, когда вызывается функция, then counter
всегда будет объявлен и инициализирован 10 .