Привет всем! Я недавно начал изучать Python и мне нужна помощь. Как записать факториал в питоне? Знаю, что есть метод рекурсии, но не уверен, как его правильно использовать. Может кто-то поделится примером кода или объяснит шаги? Спасибо!
Привет всем! Я недавно начал изучать Python и мне нужна помощь. Как записать факториал в питоне? Знаю, что есть метод рекурсии, но не уверен, как его правильно использовать. Может кто-то поделится примером кода или объяснит шаги? Спасибо!
Ждём вас в нашем чате в Телеграмм ==>> @pythoneer_chat
А ТАКЖЕ: Канал о Python, статьи и книги ==>> @pythoneer_ru
Привет! Вот тебе пример рекурсивной функции для вычисления факториала. Обрати внимание, что мы проверяем входное значение - если оно меньше нуля, то выходим с исключением. Если входное значение 0 или 1, возвращаем 1. В остальных случаях вызываем функцию рекурсивно.
Надеюсь, это поможет!Программный код:
def factorial(n):
if n < 0:
raise ValueError("Факториал не существует для отрицательных чисел.")
elif n == 0 or n == 1:
return 1
else:
return n * factorial(n - 1)
Класс, благодарю за пример. Не знал, что нужно проверять отрицательные числа. Похоже, рекурсия действительно мощная штука!Сообщение от EmmaFrost
Если не хочешь заморачиваться с рекурсией, вот вариант через цикл:
Этот способ проще и тоже работает.Программный код:
def factorial(n):
result = 1
for i in range(2, n + 1):
result *= i
return result
О, круто! Такой вариант реально проще для понимания. Спасибо, удобно так!Сообщение от OlegArcher
Да, циклы ок, но в питоне можно и через встроенные модули типа math сделать:
Просто и быстро.Программный код:
import math
print(math.factorial(5))
О, реально, про math я забывал! Наверное, на больших числах будет быстрее так. Спасибо за напоминание!Сообщение от Рита
Ещё можно использовать функцию reduce из модуля functools для вычисления факториала:
Немного хардкорно, но тоже работает.Программный код:
from functools import reduce
import operator
def factorial(n):
return reduce(operator.mul, range(1, n + 1), 1)
Хаха, прикольно, про reduce не думал! Это для любителей функционального программирования. СПС за идею!Сообщение от IvanValley