Показать сообщение отдельно
  #20 (permalink)  
Старый 02.04.2014, 16:13
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Что касается технической реализации рекурсии, то надо же понимать что подпрограмма может "вернуть" результат своей работы только записав его в память по заранее известному адресу.

Вполне понятно что для каждого такого результата выделяется новая память, где данные хранятся вплоть до команды освобождения затребованной памяти.

Следовательно в процессе вызова функции из функции - никакой разницы той же самой функции, или другой, которая хочет заюзать результат вызова предыдущей функции - результаты будут накапливаться и накапливаться пока функция вызывает функцию, в которой следует вызов функции и так далее. Это фаза заполнения стека.

Использование накопленных результатов происходит после вызова последней функции (или последнего вызова функции). То есть в фазу выборки стека.

Например

var res = one().two().three().four().five();

Это не рекурсия, конечно, а то начнут тут некоторые кадры в зеркала бросаться. Такой код выполняется справа налево. Ну так вот, можете и рекурсию предствлять себе как выполнение с конца.

Последний раз редактировалось kostyanet, 02.04.2014 в 16:17.
Ответить с цитированием