Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Cтанислав Ильич Ученик (104), закрыт 2 недели назад
Друзья, здравствуйте. Сейчас я учусь программировать на 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()))
Лучший ответ
Андрей Высший разум (462137) 1 месяц назад
Для того, чтобы значение-инциализатор НЕ влияло на результат.

При сложении переменная-сумматор инициализируется нулём:
 x + 0 == x 
При умножении переменная-мультипликатор инициализируется единицей:
 x * 1 == x 

Функция factorial правильна для любых n >= 0, но функция fact ошибочна для n == 0: factorial(0) == 1 (правильно), fact(0) == 0 (ошибка).
Остальные ответы
ㅤㅤㅤㅤㅤㅤ ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ Мыслитель (5367) 1 месяц назад
Название функции и переменой Одинаковы.
Erny Kracrol Профи (942) 1 месяц назад
Потому что если мы будем принимать переменную factorial за ноль, то и в ответе всегда будет ноль, 0 * 9 = 0 ; 1 * 9 = 9. Во втором коде тоже самое, что и в первом. Factorial тоже начинает умножаться с единицы for I in range(1, number).
Erny KracrolПрофи (942) 1 месяц назад
Например, нужно найти факториал 3. При factorial = 1 будет : 1 * 1 * 2 * 3 = 6. При factorial = 0 - 0 * 1 * 2 * 3 =0 . Если же мы возьмем factorial 2, то и ответ будет неверным - 2 * 1 * 2 * 3 = 12
Cтанислав Ильич Ученик (104) Erny Kracrol, Cпасибо огромное. Вот сейчас максимально понятно стало. Я часа полтора голову ломал. Вот конкретно это дополнение к ответу все вопросы исчерпало
Похожие вопросы