Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 21, 2009 08:37:18

Djony1987
От:
Зарегистрирован: 2009-01-21
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Рекурсия в Python

Всем привет!
Начал изучать Python с книжки Учимся программировать вместе с Питоном (Чаплыгин А. Н.). Там есть примеры рекурсии и до меня не доходит как все работает( Подскажите, есть ли книжки по этому языку где подробно объясняется рекурсия?
Если нет, объясните плис как работает эта функция:

def fact(n):
if n == 0:
return 1
return fact(n-1)*n

Спасибо!



Офлайн

#2 Янв. 21, 2009 09:05:31

SvartalF
От:
Зарегистрирован: 2008-06-29
Сообщения: 73
Репутация: +  0  -
Профиль   Отправить e-mail  

Рекурсия в Python

Попробуйте на листке бумаги пошагово написать работу функции.



Офлайн

#3 Янв. 21, 2009 09:07:00

The gray Cardinal
От:
Зарегистрирован: 2007-03-07
Сообщения: 422
Репутация: +  0  -
Профиль   Отправить e-mail  

Рекурсия в Python

Рекурсия — это вызов функцией самой себя. “Чтобы понять рекурсию, надо понять рекурсию” :).
В данном случае просто возьми небольшое число (например, 3) и попытайся представить себя интерпретатором, т.е. “выполни” сам эту функцию, водя карандашом по экрану.



Офлайн

#4 Янв. 21, 2009 09:57:37

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Рекурсия в Python

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



Офлайн

#5 Янв. 21, 2009 17:55:48

Djony1987
От:
Зарегистрирован: 2009-01-21
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Рекурсия в Python

Спасибо за советы!
Напишу как я понимаю последовательность действий для fact(3)
1. возвращается fact(2)*3
2. возвращается fact(1)*2
3. возвращается fact(0)*1
4. возвращается 1 это это и есть fact(0)
5. возвращается 1*1 и это и есть fact(1)
6. возвращается 1*1*2 и это и есть fact(2)
7. возвращается 1*1*2*3 и это и есть то что нам надо, fact(3)
Я праивльно мыслю? )



Офлайн

#6 Янв. 22, 2009 07:00:22

Striver
От:
Зарегистрирован: 2006-10-26
Сообщения: 247
Репутация: +  22  -
Профиль   Отправить e-mail  

Рекурсия в Python

Я правильно мыслю, значит правильно существую!

Да, всё так и есть.



Офлайн

#7 Янв. 22, 2009 07:11:16

Djony1987
От:
Зарегистрирован: 2009-01-21
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Рекурсия в Python

Striver
Я правильно мыслю, значит правильно существую!

Да, всё так и есть.
Это хорошо! Сенк!
Главное более сложные примеры понять))



Офлайн

#8 Янв. 22, 2009 07:33:39

Striver
От:
Зарегистрирован: 2006-10-26
Сообщения: 247
Репутация: +  22  -
Профиль   Отправить e-mail  

Рекурсия в Python

По поводу рекурсивного факториала вспомнилось…

Приятель у меня преподом в техникуме работал, рассказывал. Задал он своим лоботрясам подобную программку написать (они Паскаль проходили). А большинство там просто писать без ошибок не в состоянии, какое там программирование. На всю группу был 1 соображающий парень, за 5 мин. лабу сдал и свалил оттуда. Все остальные у него тупо списали. Мой приятель каждому сдающему задавал 1 вопрос: объясни пошагово, как считается в программе факториал 5-ти. И у всех вместо 125-ти 25 получается. Он их заставил найти того, у кого они посписывали, чтобы он им объяснил, как это работает, чтобы они сами смогли объяснить потом.

И ещё по поводу рекурсии.
Когда я Sheme изучать пытался, я до конца так ХВОСТОВУЮ рекурсию и не понял… Не отличаю я её от обычной.



Офлайн

#9 Янв. 22, 2009 10:37:10

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Рекурсия в Python

Djony1987
Главное более сложные примеры понять
Дык прелесть рекурсии именно в том что тебе не надо понимать все целиком, тебе надо понять:
1. Как выполняется единичный вызов
2. Условие выхода
и все ;)



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

Офлайн

#10 Янв. 23, 2009 07:43:10

Djony1987
От:
Зарегистрирован: 2009-01-21
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Рекурсия в Python

Striver
По поводу рекурсивного факториала вспомнилось…

И ещё по поводу рекурсии.
Когда я Sheme изучать пытался, я до конца так ХВОСТОВУЮ рекурсию и не понял… Не отличаю я её от обычной.
А в чем её суть?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version