JavaScript Рекурсия
Всем Доброго времени суток !
Только недавно начал изучать ЯваСкрипт. Читал про рекурсию Вот пример:
function sumTo(n) {
if (n == 1) return 1;
return n + sumTo(n-1);
}
alert( sumTo(100) ); //5050
ретурн ведь возвращает значение обратно той функции которую вызывали, так почему когда функция доходит до значения 1 и она видит условие if: if (n == 1) return 1;она ведь должна возвратить 1 как написано по условию и тогда sumTo(100) будит равен 1 а не 5050. Приведу пример:
function sumTo(n) {
return 1;
}
alert( sumTo(4) );
Результат: 1 и не имеет значение какое число было в sumTo(число) Не могли бы вы объяснить как идёт процесс рекурсии пошагово, то есть всё подробно, куда retun передаёт значение, где хранятся значения когда функция запущена. |
Ну во-первых писать в пределах функции более одного return это по меньшей мере признак дурного тона. Из-за этого возникает путаница.
А во-вторых все верно, каждый вызов функции sumTo относится к предыдущему контексту, то есть образуется длинный ряд замыканий. В конце концов, когда рекурсия прерывается, попадая под условие выхода, все полученные ранее результаты выполнений всех итераций складываются. |
DreamTheater
Спасибо! Если у вас найдётся ссылочка по сабжу(мб в учебнике есть, я его весь не читал) буду очень рад! Просто хочется ещё более глубоко понимать данный вопрос, для созданий собственных функций такого типа. для меня просто это новая информация: все полученные ранее результаты выполнений всех итераций складываются. |
Цитата:
Тут же для каждого вызова создается новый кадр на стеке. Цитата:
Цитата:
|
Цитата:
Спасибо всем за помощь всё сало намного яснее ! |
Цитата:
|
Про один return на функцию это вы явно загнули.
|
немножко не из той оперы пример, но пусть будет
var num = 0;
function inc() {
return ++num;
}
alert( inc() + inc() + inc() );
|
Цитата:
nerv_, не понял |
Цитата:
|
| Часовой пояс GMT +3, время: 04:57. |