Djony1987
Янв. 21, 2009 08:37:18
Всем привет!
Начал изучать Python с книжки Учимся программировать вместе с Питоном (Чаплыгин А. Н.). Там есть примеры рекурсии и до меня не доходит как все работает( Подскажите, есть ли книжки по этому языку где подробно объясняется рекурсия?
Если нет, объясните плис как работает эта функция:
def fact(n):
if n == 0:
return 1
return fact(n-1)*n
Спасибо!
SvartalF
Янв. 21, 2009 09:05:31
Попробуйте на листке бумаги пошагово написать работу функции.
The gray Cardinal
Янв. 21, 2009 09:07:00
Рекурсия — это вызов функцией самой себя. “Чтобы понять рекурсию, надо понять рекурсию” :).
В данном случае просто возьми небольшое число (например, 3) и попытайся представить себя интерпретатором, т.е. “выполни” сам эту функцию, водя карандашом по экрану.
igor.kaist
Янв. 21, 2009 09:57:37
По поводу изучения, что это такое, смотри гугл. По запросу “рекурсия”, пройдись по первым ссылкам, куча примеров есть. Рекурсия это не “фишка” именно питона, многие языки позволяют реализовывать рекурсию. Теорию ты должен изучить сам, поэтому в учебнике по питону не рассматривается этот вопрос широко. Оно и правильно, ведь материал по этой теме, преподают даже в школах (ну представь себе, что в учебнике по питону, рассказывалось бы о том, что такое файл, определение функции sin и т.д.)
Djony1987
Янв. 21, 2009 17:55:48
Спасибо за советы!
Напишу как я понимаю последовательность действий для 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)
Я праивльно мыслю? )
Striver
Янв. 22, 2009 07:00:22
Я правильно мыслю, значит правильно существую!
Да, всё так и есть.
Djony1987
Янв. 22, 2009 07:11:16
Striver
Я правильно мыслю, значит правильно существую!
Да, всё так и есть.
Это хорошо! Сенк!
Главное более сложные примеры понять))
Striver
Янв. 22, 2009 07:33:39
По поводу рекурсивного факториала вспомнилось…
Приятель у меня преподом в техникуме работал, рассказывал. Задал он своим лоботрясам подобную программку написать (они Паскаль проходили). А большинство там просто писать без ошибок не в состоянии, какое там программирование. На всю группу был 1 соображающий парень, за 5 мин. лабу сдал и свалил оттуда. Все остальные у него тупо списали. Мой приятель каждому сдающему задавал 1 вопрос: объясни пошагово, как считается в программе факториал 5-ти. И у всех вместо 125-ти 25 получается. Он их заставил найти того, у кого они посписывали, чтобы он им объяснил, как это работает, чтобы они сами смогли объяснить потом.
И ещё по поводу рекурсии.
Когда я Sheme изучать пытался, я до конца так ХВОСТОВУЮ рекурсию и не понял… Не отличаю я её от обычной.
PooH
Янв. 22, 2009 10:37:10
Djony1987
Главное более сложные примеры понять
Дык прелесть рекурсии именно в том что тебе не надо понимать все целиком, тебе надо понять:
1. Как выполняется единичный вызов
2. Условие выхода
и все ;)
Djony1987
Янв. 23, 2009 07:43:10
Striver
По поводу рекурсивного факториала вспомнилось…
И ещё по поводу рекурсии.
Когда я Sheme изучать пытался, я до конца так ХВОСТОВУЮ рекурсию и не понял… Не отличаю я её от обычной.
А в чем её суть?