Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.05.2012, 07:20
Интересующийся
Отправить личное сообщение для noname1990 Посмотреть профиль Найти все сообщения от noname1990
 
Регистрация: 04.05.2012
Сообщений: 18

Помогите разобраться с рекурсией
объясните пж-та как тут отрпабатывает скрипт
function func ( sun )
		{ 
				
				if (sun > 0 )
				{ 
						
						console.log(sun)
						func ( sun - 1 );
						console.log( sun + 'a');
				}
				
		}
		func(3)

Почему выводит 321, а потом 1a2a3a??
Ответить с цитированием
  #2 (permalink)  
Старый 30.05.2012, 10:47
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

Трудно объяснять рекурсию. Попробую написать пошаговый сценарий, того, что происходит после вызова функции. Отступами показывается уровень погружения рекурсии. Итак, вызвали функцию и поехали (следите и по коду в том числе):

Код:
1. Записать в консоль 3.
2. Вызвать func( 2 )
  2.1 Записать в консоль 2.
  2.2 Вызвать func( 1 ).
    2.2.1 Записать в консоль 1.
    2.2.2 Вызвать func( 0 ).
      2.2.2.1 закончить выполнение функции
    2.2.3 Записать в консоль 1a
    2.2.4 Закончить выполнение функции
  2.3. Записать в консоль 2a
  2.4 Закончить выполнение функции
3. Записать в консоль 3a
4. Закончить выполнение функции
Ответить с цитированием
  #3 (permalink)  
Старый 30.05.2012, 11:19
Интересующийся
Отправить личное сообщение для noname1990 Посмотреть профиль Найти все сообщения от noname1990
 
Регистрация: 04.05.2012
Сообщений: 18

Спасибо, тока не понятно почему он начинает с 1а...он как-то снижу вверх поднимается по стеку? или я что-т не так понял?
Ответить с цитированием
  #4 (permalink)  
Старый 30.05.2012, 11:26
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

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-я строка - хвост питона.


Ну как-то так в общем.
Всем питона, пацаны!)
Ответить с цитированием
  #5 (permalink)  
Старый 30.05.2012, 11:31
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

Gvozd, это феерично! Действительно, так может оказаться понятнее (=

Понять рекурсию, это как проползти через кишки питона =) Почти романтика!

noname1990, и опять же, глядя на мой список: чем дальше отступ тем глубже вы находитесь внутри питона. Нет отступа — вы внутри одного питона, один отступ: вы попали ещё в одного питона внутри первого и т.д.

Функция, вызывая свою копию, ждёт, пока та закончит работу и только после этого продолжает выполнять свои инструкции дальше.

Последний раз редактировалось GuardCat, 30.05.2012 в 11:34.
Ответить с цитированием
  #6 (permalink)  
Старый 30.05.2012, 11:47
Интересующийся
Отправить личное сообщение для noname1990 Посмотреть профиль Найти все сообщения от noname1990
 
Регистрация: 04.05.2012
Сообщений: 18

Питоны просто шедевральные!))))
Всем спасибо, теперь вроде все догнал))
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста девушке разобраться Feni4ka jQuery 10 26.04.2011 19:25
Помогите разобраться!!! Greendumb Общие вопросы Javascript 8 19.08.2010 14:04
Помогите разобраться с кодом. TheWanderer Общие вопросы Javascript 10 17.04.2010 13:41
Помогите пожалуйста разобраться Kupu4 Ваши сайты и скрипты 0 21.01.2010 10:44
Помогите разобраться с галереей IMAGIN yana_studio Общие вопросы Javascript 4 12.12.2009 17:24