Помогите разобраться с рекурсией
объясните пж-та как тут отрпабатывает скрипт
function func ( sun ) { if (sun > 0 ) { console.log(sun) func ( sun - 1 ); console.log( sun + 'a'); } } func(3) Почему выводит 321, а потом 1a2a3a?? |
Трудно объяснять рекурсию. Попробую написать пошаговый сценарий, того, что происходит после вызова функции. Отступами показывается уровень погружения рекурсии. Итак, вызвали функцию и поехали (следите и по коду в том числе):
Код:
1. Записать в консоль 3. |
Спасибо, тока не понятно почему он начинает с 1а...он как-то снижу вверх поднимается по стеку? или я что-т не так понял?
|
http://clck.ru/d/p1NR4ASA19Zlb
Я нарисовал для вас питонов Двигаемся слева направо, входя во внутрь питонов 1. Для начала мы попадаем в рот первого питона. Мы находимся в его голове(head) 2. Идем дальше вглубь внутренностей тела, и обнаруживаем что в его теле содержится другой питон 3. Заходим внутрь второго питона. Сейчас мы находимся внутри головы(head) второго питона 4. Идем дальше вглубь внутренностей тела, и обнаруживаем что в теле второго питона, также содержится другой питон. 5. Заходим внутрь третьего питона. Сейчас мы находимся внутри головы(head) третьего питона 6. Идем дальше вглубь внутренностей тела, и обнаруживаем что в теле третьего питона ничего не содержится. 7. Быстро миновав пустое тело третьего питона мы оказываемся в его хвосте(tail) 8. Выйдя из третьего питона мы оказываемся в хвосте(tail) второго питона 9. Выйдя из второго питона мы оказываемся в хвосте(tail) первого питона 9. Выйдя из первого питона мы оказываемся снаружи. Работа завершена То есть наш маршрут выглядит как голова1 - голова2- голова3 - хвост 3 - хвост2 - хвост1 Так даже похоже на вашу строку "3 2 1 1a 2a 3a" noname1990, В вашем коде с 4-й по 7-ю строки - это голова питона 8-я строка - это его кишки содержащие следующего питона 9-я строка - хвост питона. Ну как-то так в общем. Всем питона, пацаны!) |
Gvozd, это феерично! Действительно, так может оказаться понятнее (=
Понять рекурсию, это как проползти через кишки питона =) Почти романтика! noname1990, и опять же, глядя на мой список: чем дальше отступ тем глубже вы находитесь внутри питона. Нет отступа — вы внутри одного питона, один отступ: вы попали ещё в одного питона внутри первого и т.д. Функция, вызывая свою копию, ждёт, пока та закончит работу и только после этого продолжает выполнять свои инструкции дальше. |
Питоны просто шедевральные!))))
Всем спасибо, теперь вроде все догнал)) |
Часовой пояс GMT +3, время: 06:49. |