Вычисление факториала рекурсией питон

Вычисляем итеративный и рекурсивный факториал с помощью Python

По определению, факториал – это произведение положительного целого числа и всех положительных целых чисел, которые меньше или равны данному числу. Другими словами, получение факториала числа означает умножение всех целых чисел от этого числа вплоть до 1.

Факториал – это целое число, за которым следует восклицательный знак.

5! обозначает факториал из пяти.

Чтобы вычислить факториал, мы умножаем число на каждое целое число, меньшее его, пока не дойдём до 1:

Запомните эти простые правила, ведь в этом уроке мы узнаем, как вычислять факториал целого числа с помощью Python, используя циклы и рекурсию. Начнём с вычисления факториала с помощью циклов.

Вычисляем факториал с помощью циклов

Мы можем вычислять факториалы, используя как цикл while , так и цикл for . Общий процесс довольно похож в обоих случаях. Всё, что нам нужно, – это параметр в качестве входных данных и счетчик.

Давайте начнем с цикла for :

def get_factorial_for_loop(n): result = 1 if n > 1: for i in range(1, n+1): result = result * i return result else: return 'n has to be positive'

Возможно, вы заметили, что мы считаем, начиная с 1 до n-числа , в то время как в определении мы описали факториал, как произведение положительного целого числа и всех положительных целых чисел до 1. Но по законам математики:

Вычисляем итеративный и рекурсивный факториал с помощью Python

Проще говоря, (n – (n-1)) всегда равно 1.

Это значит, что не важно, в каком направлении мы считаем. Можем начать с 1 и увеличиваться в направлении n-числа , или он может начинаться с n-числа и уменьшаться в направлении 1. Теперь, когда мы всё объяснили, начнём разбирать функцию, о которой говорили.

Наша функция принимает параметр n , который обозначает число, для которого мы вычисляем факториал. Сначала мы определяем переменную с именем result и присваиваем ей значение 1 .

Вы можете спросить, почему 1, а не 0?

Потому что если бы мы присвоили ему 0, то все последующие умножения на 0, естественно, привели бы к 0.

Затем мы начинаем наш цикл for в диапазоне от 1 до n+1 . Помните, что диапазон Python остановится перед вторым аргументом. Чтобы включить и последнее число, мы просто добавляем еще 1 .

Внутри цикла for мы умножаем текущее значение result на текущее значение вашего индекса i .

Наконец, мы возвращаем конечное значение result . Давайте протестируем нашу функцию и выведем результат:

inp = input("Enter a number: ") inp = int(inp) print(f"The result is: ")

Программа предложит пользователю ввести данные. Мы попробуем с 4 :

Enter a number: 4 The result is: 24

Можете проверить результат на калькуляторе:

Читайте также:  Плавное увеличение высоты блока css

4! = 4 * 3 * 2 * 1 = 24.

Теперь давайте посмотрим, как мы можем вычислить факториал, используя цикл while . Вот наша модифицированная функция:

def get_factorial_while_loop(n): result = 1 while n > 1: result = result * n n -= 1 return result

Это очень похоже на цикл for . Только в этот раз, мы движемся от n к 1, что ближе к математическому определению. Протестируем нашу функцию:

inp = input("Enter a number: ") inp = int(inp) print(f"The result is: ")
Enter a number: 4 The result is: 24

Хотя считали наоборот, результат получился тот же.

Рассчитывать факториал с помощью цикла легко. Теперь посмотрим, как вычислить факториал с помощью рекурсивной функции.

Вычисляем факториал с помощью рекурсивной функции

Рекурсивная функция – это функция, которая вызывает саму себя. Определение кажется страшным, но потерпите, и вы поймёте, что это значит.

Обычно каждая рекурсивная функция состоит из двух основных компонентов: базового варианта и рекурсивного шага.

Базовые случаи – это самые маленькие примеры задачи. Также это перерыв, случай, который вернет значение и выйдет из рекурсии. С точки зрения факторных функций, базовый случай – это когда мы возвращаем конечный элемент факториала, который равен 1.

Без базового случая или с неправильным базовым случаем ваша рекурсивная функция может выполняться бесконечно, вызывая переполнение.

Рекурсивные шаги, как следует из названия, являются рекурсивной частью функции, где вся задача преобразуется в нечто меньшее. Если рекурсивный шаг не позволяет уменьшить задачу, то рекурсия опять-таки может выполняться бесконечно.

Рассмотрим повторяющуюся часть факториалов:

5! = 5 * 4 * 3 * 2 * 1

4 * 3 * 2 * 1 = 4!

Другими словами, 5! = 5 * 4! , 4! = 4 * 3! и так далее.

Таким образом, мы можем сказать, что n! = n * (n-1)!. Это будет рекурсивный шаг нашего факториала!

Факториальная рекурсия заканчивается, когда она достигает 1. Это будет наш базовый случай. Мы вернем 1 , если n равно 1 или меньше, покрывая нулевой ввод.

Взглянем на нашу рекурсивную факторную функцию:

def get_factorial_recursively(n): if n 

Как вы видите, блок if воплощает наш базовый вариант, в то время как блок else охватывает рекурсивный шаг.

inp = input("Enter a number: ") inp = int(inp) print(f"The result is: ")
Enter a number:3 The result is: 6

В итоге тот же результат. Но на этот код более сложный:

Когда мы вводим данные, функция проверит блок if , и, поскольку 3 больше 1, она перейдет к блоку else . В этом блоке мы видим строчку return n * get_factorial_recursively(n-1) .

Мы знаем значение n , оно равно 3 , но get_factorial_recursively(n-1) еще предстоит его вычислить.

Затем программа вызывает ту же функцию еще раз, но на этот раз наша функция принимает 2 в качестве параметра. Он проверяет блок if , переходит к блоку else и снова встречается с последней строкой. Теперь текущее значение n равно 2 , но программа все равно должна вычислить get_factorial_recursively(n-1) .

Поэтому он снова вызывает функцию, но на этот раз блок if , или, скорее, базовый класс, успешно возвращает 1 и выходит из рекурсии.

Следуя тому же шаблону, он возвращает каждый результат функции, умножая текущий результат на предыдущий n и возвращая его для предыдущего вызова функции. Другими словами, наша программа сначала доходит до нижней части факториала (который равен 1), затем идёт вверх, умножая на каждом шаге.

Также удаляет функцию из стека вызовов одну за другой, пока не будет возвращен конечный результат n * (n-1) .

Обычно именно так работают рекурсивные функции. Некоторые более сложные задачи могут потребовать более глубоких рекурсий с более чем одним базовым случаем или более чем одним рекурсивным шагом. Но на данный момент этой простой рекурсии достаточно, чтобы решить наш факториал!

В этой статье мы рассмотрели, как вычислять факториалы с использованием циклов for и while . Мы также узнали, что такое рекурсия и как вычислять факториал с помощью рекурсии.

Если вам понравилась рекурсия и вы хотите больше практиковаться, попробуйте вычислить последовательность Фибоначчи с помощью рекурсии! И если у вас есть какие-либо вопросы или мысли по поводу нашей статьи, не стесняйтесь делиться ими в разделе комментариев.

Источник

Вычисление факториала

Факториалом числа называют произведение всех натуральных чисел до него включительно. Например, факториал числа 5 равен произведению 1 * 2 * 3 * 4 * 5 = 120.

Формула нахождения факториала:

n! = 1 * 2 * … * n,

где n – это число, а n! – факториал этого числа.

Формулу можно представить в таком виде:

т. е. каждый предыдущий множитель меньше на единицу, чем последующий. Или в перевернутом виде, когда каждый следующий меньше предыдущего на единицу:

Для вычисления факториала с помощью цикла можно использовать любую формулу. Для рекурсивного вычисления используется вторая.

Вычисление факториала с помощью циклов

n = int(input()) factorial = 1 while n > 1: factorial *= n n -= 1 print(factorial)

Вычисление факториала с помощью цикла for :

n = int(input()) factorial = 1 for i in range(2, n+1): factorial *= i print(factorial)

Нахождение факториала рекурсией

def fac(n): if n == 1: return 1 return fac(n - 1) * n print(fac(5))

Поток выполнения программы при n = 5:

  1. Вызов функции fac(5)
  2. fac(5) вызывает fac(4)
  3. fac(4) вызывает fac(3)
  4. fac(3) вызывает fac(2)
  5. fac(2) вызывает fac(1)
  6. fac(1) возвращает в fac(2) число 1
  7. fac(2) возвращает в fac(3) число 1 * 2, т. е. 2
  8. fac(3) возвращает в fac(4) число 2 * 3, т. е. 6
  9. fac(4) возвращает в fac(5) число 6 * 4, т. е. 24
  10. fac(5) возвращает число 24 * 5, т. е. 120 в основную ветку программы
  11. Число 120 выводится на экран

Функция factorial модуля math

Модуль math языка программирования Python содержит функцию factorial , принимающую в качестве аргумента неотрицательное целое число и возвращающую факториал этого числа:

>>> import math >>> math.factorial(4) 24

Источник

3 способа вычислить факториал в Python

3 способа вычислить факториал в Python

Статьи

Введение

В ходе статьи рассмотрим 3 способа вычислить факториал в Python.

Вычисление факториала циклом while

Цикл while

Для начала дадим пользователю возможность ввода числа и создадим переменную factorial равную единице:

number = int(input('Введите число: ')) factorial = 1

Как мы знаем, факториал – это произведение натуральных чисел от единицы до числа n. Следовательно создадим цикл, который не закончится, пока введённое пользователем число больше единицы. Внутри цикла увеличиваем значение в переменной factorial умножая его на переменную number, после чего уменьшаем значение в number на единицу:

number = int(input('Введите число: ')) factorial = 1 while number > 1: factorial = factorial * number number = number - 1 print(factorial) # Введите число: 10 # 3628800

Цикл for

Обычно способ нахождения факториала при помощи цикла for не рассматривается, но почему бы и нет. Принцип не сильно отличается от цикла while, просто приравниваем значение введённое пользователем к переменной factorial, а в цикле указываем количество итреаций начиная с единицы, и заканчивая введённым числом:

number = int(input('Введите число: ')) factorial = number for i in range(1, number): factorial = factorial * i print(factorial) # Введите число: 5 # 120

Вычисление факториала Рекурсией

Для вычисления факториала про помощи рекурсии, создадим функцию factorial(), и в качестве аргумента передадим number:

Внутри функции добавим условие, что если переданное число в аргумент number равняется единице, то возвращаем его. Если же условие не сработало, то вернётся аргумент number умноженный на вызов функции factorial() с передачей аргумента number – 1:

def factorial(number): if number == 1: return number else: return number * factorial(number - 1)

Дадим пользователю возможность ввода, вызовем функцию и выведем результат в консоль:

def factorial(number): if number == 1: return number else: return number * factorial(number - 1) print(factorial(int(input('Введите число: ')))) # Введите число: 7 # 5040

Вычисление факториала методом factorial()

В стандартном модуле math есть специальный метод для вычисления факториала под названием factorial(). Используем его для нахождения факториала:

from math import factorial number = int(input('Введите число: ')) print(factorial(number)) # Введите число: 4 # 24

Заключение

В ходе статьи мы с Вами рассмотрели целых 3 способа вычислить факториал в Python. Надеюсь Вам понравилась статья, желаю удачи и успехов! 🙂

Источник

Вычисление факториала числа с использованием рекурсии

Программа принимает на вход число и вычисляет факториал этого числа с использованием рекурсивного алгоритма.

Решение задачи

  1. Записываем введенное пользователем число в отдельную переменную.
  2. Передаем это число в качестве аргумента в рекурсивную функцию, которая вычисляет факториал.
  3. Определяем внутри этой функции базовое условие рекурсии: в случае, когда аргумент функции меньше либо равен 1 , рекурсивная функция прекращает свою работу и возвращает в качестве результата 1 .
  4. В противном случае в качестве результата возвращается число, умноженное на рекурсивную функцию, аргумент которой уменьшен на единицу. И все повторяется заново.
  5. После того, как рекурсивная функция прекратила свою работу, на экран выводится результат.
  6. Конец.

Исходный код

Ниже дан исходный код, который осуществляет нахождение факториала числа при помощи рекурсии. Результаты работы программы также даны ниже.

Объяснение работы программы

  1. Пользователь вводит число и оно записывается в переменную n .
  2. Передаем число n в качестве аргумента в рекурсивную функцию, которая вычисляет факториал этого числа.
  3. Задаем базу рекурсии при помощи условия n
  4. В противном случае функция возвращает n * factorial(n-1) и все повторяется заново.
  5. После того, как функция завершит свою работу, результат выводится на экран.

Результаты работы программы

Пример 1: Введите число:5 Факториал числа равен: 120 Пример 2: Введите число:9 Факториал числа равен: 362880

Источник

Оцените статью