zmeelov
Дек. 16, 2015 21:58:06
В качестве учебного примера рекурсии мне показали программу, вычисляюющую факториал вводимого числа. Код приведен ниже.
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)???
Кто знает, объясните, пожалуйста.
Firik
Дек. 16, 2015 22:39:20
zmeelovФункция вызывает сама себя до тех пор, пока N больше нуля. Она знает, что (0 == 1) вот отсюда
zmeelov
Дек. 16, 2015 23:06:14
Все равно не пойму. Т.е. если, функция дошла до n==0, происходит переход на else и фунция присваивает себе значение 1. А потом уже идет перемножение до того, пока функция не достигнет значения введенного N.
Я правильно понял?
py.user.next
Дек. 17, 2015 02:21:01
zmeelov
Значит ли, что функция работает как цикл, постоянно вычисляя факториал числа, меньшего на единицу, пока не дойдет до факториала нуля?
Она работает не как цикл, а как лестница из функций, где каждая ступенька одинаковая. Вычисления начинаются, когда лестница построена до самой нижней ступеньки.
zmeelov
Дек. 17, 2015 21:43:46
Спасибо за помощь всем неравнодушным.