Форум сайта python.su
0
В качестве учебного примера рекурсии мне показали программу, вычисляюющую факториал вводимого числа. Код приведен ниже.
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)
Офлайн
6
zmeelov
Функция вызывает сама себя до тех пор, пока N больше нуля. Она знает, что (0 == 1) вот отсюда
else: return 1
Офлайн
0
Все равно не пойму. Т.е. если, функция дошла до n==0, происходит переход на else и фунция присваивает себе значение 1. А потом уже идет перемножение до того, пока функция не достигнет значения введенного N.
Я правильно понял?
Офлайн
857
zmeelovОна работает не как цикл, а как лестница из функций, где каждая ступенька одинаковая. Вычисления начинаются, когда лестница построена до самой нижней ступеньки.
Значит ли, что функция работает как цикл, постоянно вычисляя факториал числа, меньшего на единицу, пока не дойдет до факториала нуля?
Офлайн
0
Спасибо за помощь всем неравнодушным.
Офлайн