Программа Python для вычисления факториала числа
Факториал числа — произведение всех целых чисел от 1 до этого числа.
Например, факториал 6 равен 1*2*3*4*5*6 = 720. Для отрицательных чисел факториал не определён, а факториал нуля равен единице: 0! = 1.
Что нужно знать
Факториал через цикл
# Python: считаем факториал числа, заданного пользователем.
# измените значение, чтобы получить другой результат
num = 7
# Чтобы запросить значение у пользователя:
#num = int(input("Enter a number: "))
factorial = 1
# проверяем знак числа
if num < 0:
print("Sorry, factorial does not exist for negative numbers")
elif num == 0:
print("The factorial of 0 is 1")
else:
for i in range(1,num + 1):
factorial = factorial*i
print("The factorial of",num,"is",factorial)
Вывод
The factorial of 7 is 5040
Примечание
Чтобы проверить программу на другом числе, поменяйте значение num.
Число, факториал которого ищем, хранится в num. Через if...elif...else проверяем, отрицательное оно, ноль или положительное. Для положительного значения с помощью цикла for и функции range() накапливаем произведение.
Итерация |
factorial*i (новое значение) |
|---|---|
i = 1 |
1 * 1 = 1 |
i = 2 |
1 * 2 = 2 |
i = 3 |
2 * 3 = 6 |
i = 4 |
6 * 4 = 24 |
i = 5 |
24 * 5 = 120 |
i = 6 |
120 * 6 = 720 |
i = 7 |
720 * 7 = 5040 |
Факториал через рекурсию
# Python: факториал через рекурсию
def factorial(x):
"""Рекурсивная функция для вычисления
факториала целого числа"""
if x == 1 or x == 0:
return 1
else:
# рекурсивный вызов
return (x * factorial(x-1))
# измените значение для другого результата
num = 7
# Чтобы запросить значение у пользователя:
# num = int(input("Enter a number: "))
# вызываем функцию factorial
result = factorial(num)
print("The factorial of", num, "is", result)
В примере выше factorial() — рекурсивная функция: она вызывает саму себя, каждый раз уменьшая значение x, пока не дойдёт до базового случая.
Как это работает
Итеративный вариант явно перемножает числа от 1 до num в цикле. Рекурсивный вариант использует определение n! = n * (n-1)! и базовые случаи 0! = 1 и 1! = 1 — каждый вызов уменьшает аргумент, пока цепочка не свернётся обратно.