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, время: 11:43. |