Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 16, 2015 21:58:06

zmeelov
Зарегистрирован: 2015-12-16
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с рекурсией!!!

В качестве учебного примера рекурсии мне показали программу, вычисляюющую факториал вводимого числа. Код приведен ниже.

def factorial(n):
if n > 0:
return n * factorial (n-1)
else:
return 1

N = int(raw_input('Input N: ‘))
if N < 0:
print (’N should not be less than zero')
else:
print (factorial(N))

Никак не пойму логику работы. Значит ли, что функция работает как цикл, постоянно вычисляя факториал числа, меньшего на единицу, пока не дойдет до факториала нуля? Если так, то откуда программа “знает”, что факториал нуля равен единице (0! == 1)???
Кто знает, объясните, пожалуйста.

Отредактировано zmeelov (Дек. 16, 2015 23:03:03)

Офлайн

#2 Дек. 16, 2015 22:39:20

Firik
Зарегистрирован: 2015-12-02
Сообщения: 151
Репутация: +  6  -
Профиль   Отправить e-mail  

Помогите разобраться с рекурсией!!!

zmeelov
Функция вызывает сама себя до тех пор, пока N больше нуля. Она знает, что (0 == 1) вот отсюда

else:
return 1

Офлайн

#3 Дек. 16, 2015 23:06:14

zmeelov
Зарегистрирован: 2015-12-16
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с рекурсией!!!

Все равно не пойму. Т.е. если, функция дошла до n==0, происходит переход на else и фунция присваивает себе значение 1. А потом уже идет перемножение до того, пока функция не достигнет значения введенного N.
Я правильно понял?

Офлайн

#4 Дек. 17, 2015 02:21:01

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Помогите разобраться с рекурсией!!!

zmeelov
Значит ли, что функция работает как цикл, постоянно вычисляя факториал числа, меньшего на единицу, пока не дойдет до факториала нуля?
Она работает не как цикл, а как лестница из функций, где каждая ступенька одинаковая. Вычисления начинаются, когда лестница построена до самой нижней ступеньки.



Офлайн

#5 Дек. 17, 2015 21:43:46

zmeelov
Зарегистрирован: 2015-12-16
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с рекурсией!!!

Спасибо за помощь всем неравнодушным.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version