Top.Mail.Ru
Ответы

Код для поиска факториала в python

Друзья, здравствуйте. Сейчас я учусь программировать на python. На данный момент я прохожу тему рекурсии и я смотрю как выглядят различные коды для нахождения факториала рекурсивным способом и итеративным. С пониманием кодов с рекурсивным способом у меня проблем не было, но на одном коде написанном итеративным способом я начал адово тупить.
Вот этот код :

def factorial(n):
factorial = 1
for i in range(1,n + 1):
factorial *= i
return factorial
print(factorial(5))

Кто может объяснить мне почему переменной factorial присвоено значение 1?
К примеру к коду который я оставлю ниже, у меня нет никаких вопросов. Но на том что выше, я реально надолго завис. Если можно, объясните все последовательно и развернуто.

def fact(n):
number = n
factorial = number
for i in range(1, number):
factorial *= i

print(factorial)
fact(int(input()))

По дате
По рейтингу
Аватар пользователя
Новичок
8мес

Для того, чтобы значение-инциализатор НЕ влияло на результат.

При сложении переменная-сумматор инициализируется нулём:

1
 x + 0 == x 

При умножении переменная-мультипликатор инициализируется единицей:

1
 x * 1 == x 


Функция factorial правильна для любых n >= 0, но функция fact ошибочна для n == 0: factorial(0) == 1 (правильно), fact(0) == 0 (ошибка).

Аватар пользователя
Мастер
8мес

Потому что если мы будем принимать переменную factorial за ноль, то и в ответе всегда будет ноль, 0 * 9 = 0 ; 1 * 9 = 9. Во втором коде тоже самое, что и в первом. Factorial тоже начинает умножаться с единицы for I in range(1, number).

Аватар пользователя
Мыслитель
8мес

Название функции и переменой Одинаковы.