#javascript #рекурсия #стек
В общем единственная тема, которую я никак не могу понять - это рекурсия. Написал маленький код, но не понимаю как он работает до конца. function power (base, exponent){ if (exponent == 0) return 1; else return base * power(base, exponent -1); } console.log(power(2, 3)); Можете ли объяснить по шагам как тут всё устроено?
Ответы
Ответ 1
Вызываем функцию с параметрами (2,3), т.е. функция имеет данный вид: function power (2, 3){ if (3 == 0) return 1; else return 2 * power(2, 3 - 1); } Далее функция(назовем ее внешняя) вызывает сама себя и создает новый уровень вложенности( назовем клон 1 ), (PS внешняя не может завершиться пока не завершатся все внутренние(клоны)) далее клон 1 вызывает сам себя и создает новый уровень вложенности( назовем клон 2 ), далее клон 2 вызывает сам себя и создает новый уровень вложенности( назовем клон 3 ), далее на клоне 3 срабатывает условие if, значит return 1 и клон 3 возвращает единицу клону 2. На клоне 2 срабатывает условие else т.е. 2 * 1( единицу вернул клон 3) , и результат(двойка) возвращается клону 1 На клоне 1 срабатывает условие else т.е. 2 * 2( двойку вернул клон 2 ), и результат(четверку) возвращает внешней функции На внешней функции срабатывает условие else т.е. 2 * 4( четверку вернул клон 1 ), и возвращает результат(восьмерку ) в консоль. Нарисовал схему работы данной функции:Ответ 2
function power (base, exponent){ //Посчитаем силу базы (хз что это, но надо так надо :) //Если экспонента точно равна нулю, то мы знаем ответ! if (exponent == 0) { return 1; //и он равен нулю } else { //Но если экспонента нулю не равна, то ответ мы не знаем //Попробуем уменьшить экспоненту на 1 и посчитать снова exponent = exponent - 1; //результатом работы функции будет число, умноженное на результат работы ЭТОЙ же функции, но с экспонентой, уменьшенной на 1 return base * power(base, exponent); } //Если придет значение экспоненты меньше нуля, то все, браузеру хана :) }
Комментариев нет:
Отправить комментарий