Программа 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 — каждый вызов уменьшает аргумент, пока цепочка не свернётся обратно.