Код для поиска факториала в 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()))
Для того, чтобы значение-инциализатор НЕ влияло на результат.
При сложении переменная-сумматор инициализируется нулём:
x + 0 == x
При умножении переменная-мультипликатор инициализируется единицей:
x * 1 == x
Функция factorial правильна для любых n >= 0, но функция fact ошибочна для n == 0: factorial(0) == 1 (правильно), fact(0) == 0 (ошибка).
Потому что если мы будем принимать переменную factorial за ноль, то и в ответе всегда будет ноль, 0 * 9 = 0 ; 1 * 9 = 9. Во втором коде тоже самое, что и в первом. Factorial тоже начинает умножаться с единицы for I in range(1, number).
Название функции и переменой Одинаковы.