Форум сайта python.su
Всем привет!
Начал изучать Python с книжки Учимся программировать вместе с Питоном (Чаплыгин А. Н.). Там есть примеры рекурсии и до меня не доходит как все работает( Подскажите, есть ли книжки по этому языку где подробно объясняется рекурсия?
Если нет, объясните плис как работает эта функция:
def fact(n):
if n == 0:
return 1
return fact(n-1)*n
Спасибо!
Офлайн
Попробуйте на листке бумаги пошагово написать работу функции.
Офлайн
Рекурсия — это вызов функцией самой себя. “Чтобы понять рекурсию, надо понять рекурсию” :).
В данном случае просто возьми небольшое число (например, 3) и попытайся представить себя интерпретатором, т.е. “выполни” сам эту функцию, водя карандашом по экрану.
Офлайн
По поводу изучения, что это такое, смотри гугл. По запросу “рекурсия”, пройдись по первым ссылкам, куча примеров есть. Рекурсия это не “фишка” именно питона, многие языки позволяют реализовывать рекурсию. Теорию ты должен изучить сам, поэтому в учебнике по питону не рассматривается этот вопрос широко. Оно и правильно, ведь материал по этой теме, преподают даже в школах (ну представь себе, что в учебнике по питону, рассказывалось бы о том, что такое файл, определение функции sin и т.д.)
Офлайн
Спасибо за советы!
Напишу как я понимаю последовательность действий для 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Это хорошо! Сенк!
Я правильно мыслю, значит правильно существую!
Да, всё так и есть.
Офлайн
По поводу рекурсивного факториала вспомнилось…
Приятель у меня преподом в техникуме работал, рассказывал. Задал он своим лоботрясам подобную программку написать (они Паскаль проходили). А большинство там просто писать без ошибок не в состоянии, какое там программирование. На всю группу был 1 соображающий парень, за 5 мин. лабу сдал и свалил оттуда. Все остальные у него тупо списали. Мой приятель каждому сдающему задавал 1 вопрос: объясни пошагово, как считается в программе факториал 5-ти. И у всех вместо 125-ти 25 получается. Он их заставил найти того, у кого они посписывали, чтобы он им объяснил, как это работает, чтобы они сами смогли объяснить потом.
И ещё по поводу рекурсии.
Когда я Sheme изучать пытался, я до конца так ХВОСТОВУЮ рекурсию и не понял… Не отличаю я её от обычной.
Офлайн
Djony1987Дык прелесть рекурсии именно в том что тебе не надо понимать все целиком, тебе надо понять:
Главное более сложные примеры понять
Офлайн
StriverА в чем её суть?
По поводу рекурсивного факториала вспомнилось…
И ещё по поводу рекурсии.
Когда я Sheme изучать пытался, я до конца так ХВОСТОВУЮ рекурсию и не понял… Не отличаю я её от обычной.
Офлайн