На чтение 3 мин Просмотров 4.5к. Опубликовано 28.02.2023
Содержание
- Введение
- Вычисление факториала циклом while
- Цикл while
- Цикл for
- Вычисление факториала Рекурсией
- Вычисление факториала методом factorial()
- Заключение
Введение
В ходе статьи рассмотрим 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. Надеюсь Вам понравилась статья, желаю удачи и успехов! 🙂
Вычисление факториала
Вводится натуральное число. Вычислить его факториал.
Решение задачи на языке программирования Python
Факториалом числа называют произведение всех натуральных чисел до него включительно. Например, факториал числа 5 равен произведению 1 * 2 * 3 * 4 * 5 = 120.
Формула нахождения факториала:
n! = 1 * 2 * … * n,
где n – это число, а n! – факториал этого числа.
Формулу можно представить в таком виде:
n! = 1 * … * (n-2) * (n-1) * n,
т. е. каждый предыдущий множитель меньше на единицу, чем последующий. Или в перевернутом виде, когда каждый следующий меньше предыдущего на единицу:
n! = n * (n-1) * (n-2) * … * 1,
Для вычисления факториала с помощью цикла можно использовать любую формулу. Для рекурсивного вычисления используется вторая.
Вычисление факториала с помощью циклов
С помощь цикла while
:
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:
- Вызов функции
fac(5)
-
fac(5)
вызываетfac(4)
-
fac(4)
вызываетfac(3)
-
fac(3)
вызываетfac(2)
-
fac(2)
вызываетfac(1)
-
fac(1)
возвращает вfac(2)
число 1 -
fac(2)
возвращает вfac(3)
число 1 * 2, т. е. 2 -
fac(3)
возвращает вfac(4)
число 2 * 3, т. е. 6 -
fac(4)
возвращает вfac(5)
число 6 * 4, т. е. 24 -
fac(5)
возвращает число 24 * 5, т. е. 120 в основную ветку программы - Число 120 выводится на экран
Функция factorial модуля math
Модуль math
языка программирования Python содержит функцию factorial
, принимающую в качестве аргумента неотрицательное целое число и возвращающую факториал этого числа:
>>> import math >>> math.factorial(4) 24
Больше задач в PDF
Вступление
По определению, факториал – это произведение положительного целого числа и всех положительных целых чисел, которые меньше или равны данному числу. Другими словами, получение факториала числа означает умножение всех целых чисел от этого числа вплоть до 1.
По правилу 0! = 1
Факториал – это целое число, за которым следует восклицательный знак.
5! обозначает факториал из пяти.
Чтобы вычислить факториал, мы умножаем число на каждое целое число, меньшее его, пока не дойдём до 1:
5! = 5 * 4 * 3 * 2 * 1
5! = 120
Запомните эти простые правила, ведь в этом уроке мы узнаем, как вычислять факториал целого числа с помощью 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. Но по законам математики:
Проще говоря, (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: {get_factorial_for_loop(inp)}")
Программа предложит пользователю ввести данные. Мы попробуем с 4:
Enter a number: 4
The result is: 24
Можете проверить результат на калькуляторе:
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: {get_factorial_while_loop(inp)}")
Опять введём 4:
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 <= 1:
return 1
else:
return n * get_factorial_recursively(n-1)
Как вы видите, блок if воплощает наш базовый вариант, в то время как блок else охватывает рекурсивный шаг.
Протестируем функцию:
inp = input("Enter a number: ")
inp = int(inp)
print(f"The result is: {get_factorial_recursively(inp)}")
В этот раз введём 3:
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. Мы также узнали, что такое рекурсия и как вычислять факториал с помощью рекурсии.
Если вам понравилась рекурсия и вы хотите больше практиковаться, попробуйте вычислить последовательность Фибоначчи с помощью рекурсии! И если у вас есть какие-либо вопросы или мысли по поводу нашей статьи, не стесняйтесь делиться ими в разделе комментариев.
Просмотры: 1 896
To use a while loop to find the factorial of a number in Python:
- Ask a number input.
- Initialize the result to 1.
- Start a loop where you multiply the result by the target number.
- Reduce one from the target number in each iteration.
- End the loop once the target number reaches 1.
Here is how it looks in code:
def factorial(n): num = 1 while n >= 1: num = num * n n = n - 1 return num
Let’s test that it works:
f = factorial(5) print(f)
Output:
120
There you have it!
To learn more about factorials and some alternative ways to calculate the factorial, please read along.
What Is the Factorial of a Number in Mathematics
In mathematics, the factorial is the product of all positive whole numbers less than or equal to a target number.
The factorial is denoted with an exclamation mark.
For example, let’s calculate the factorial of 5:
5! = 5 x 4 x 3 x 2 x 1 = 120
In layman’s terms, the factorial answers the question “In how many ways can you form a queue of n persons?”.
Recursion and Factorial in Python
In programming, recursion refers to a function that calls itself.
Usually, calculating the factorial acts as an introduction to recursion in programming courses.
This is because the factorial can be expressed recursively as:
n! = n x (n – 1)!
In this expression, there is a factorial operator (!) on both sides.
Essentially, this expression says “Factorial of n equals to n times the factorial of n – 1”.
Let’s use this as a basis to formulate a recursive factorial function in Python:
def factorial(n): if (n==1 or n==0): return 1 else: # n! = n x (n - 1)! return n * factorial(n - 1)
In this function:
- If the target number is 0 or 1, we are going to return 1, because the factorial of 0 or 1 is 1.
- If the target number is not 0 or 1, we are going to multiply it by the factorial of 1 less than the target.
Now you can test this code to make sure it works:
print(factorial(5))
Output:
120
Alternatives to Calculating the Factorial in Python
You now know what is the factorial of a number and how it is commonly calculated using recursion.
But there are some alternatives, that is:
- A built-in function
- While loop
- For loop
Let’s go through each of these approaches next.
1. Built-In Factorial Function in Python
Unless you are practicing your Python skills, you should use the built-in factorial function from the math module.
For example:
from math import factorial print(factorial(5))
Output:
120
2. While Loop Factorial in Python
Any recursive function can be written as an iterative one.
In other words, you can use a regular loop instead of recursion.
Although, the feasibility to convert a recursive function into an iterative function varies based on the complexity of the function.
When talking about recursive factorial, it is trivial to convert it into an iterative one using a while loop.
All you need to do is:
- Create a loop where you start a result from 1
- Subtract 1 from the target number
- Multiply the result by it.
- Do this until the target reaches 1 and you have successfully computed the factorial.
Here is how it looks in code:
def factorial(n): num = 1 while n >= 1: num = num * n n = n - 1 return num
3. For Loop Factorial in Python
You can also convert a recursive factorial function to one that uses a for loop in Python.
To do this:
- Specify a target number.
- Set the result at 1.
- Start a for loop from 1 to the target number + 1.
- Multiply the result by each number in this range.
- Return the result.
Here is how it looks in code:
def factorial(n): num = 1 for i in range(1, n + 1): num = num * i return num
Example run:
print(factorial(5))
Output:
120
Conclusion
Today you learned how to calculate the factorial of a number using a while loop in Python.
To recap, the factorial of a number is a whole number multiplied by all positive whole numbers less than it.
Commonly, you see factorial being calculated with a recursion. But it is just as fine to calculate the factorial using an iterative approach, that is, a while or a for loop.
If you do not need to implement the factorial yourself, use the built-in math.factorial function in Python.
Thanks for reading.
Happy coding!
Further Reading
50 Python Interview Questions
About the Author
-
I’m an entrepreneur and a blogger from Finland. My goal is to make coding and tech easier for you with comprehensive guides and reviews.
Recent Posts
In this article, you’ll learn how to find the factorial of a number using different methods like…
- Using for Loop
- Using IF…else Statement
- Using Recursion
- Using math. factorial()
Factorial of a Number using for Loop
Let us take up the example of python code that takes a positive integer as input to determine the factorial of positive integers. In the following code, the loop begins with one, and then it multiplies by each number that precedes the actual number whose factorial is to be determined.
The following python code illustrates the factorial function using a loop.
Python code:
print ("Input a number") factorialIP = int (input ()) ffactor23 = 1 for j in range (1, factorialIP+1): ffactor23 = ffactor23 * j print ("The factorial of the number is “, ffactor23)
Output:
Input a number 4 The factorial of the number is 24
The above python program takes the input of positive numbers only, and it does not have a check of negative numbers in it. In this program, the factor is 1 when j is equal to 1. When j is 2, the factor is multiplied with 2, and it will do the action till j comes at 4 to arrive at 24.
Factorial of a Number using IF…else Statement
The following python code illustrates the factorial function using function. Let us take up the following python code that takes positive integers as input to determine the factorial of positive integers.
In previous python code, the check for negative numbers was not applied, making the factorial function incomplete and prone to deliver an error message if negative numbers are put as an input.
In the given code, the loop begins with one, and then it multiplies by each number that precedes the actual number whose factorial is to be determined, and the function also checks for negative numbers.
Python code:
print("Enter a number for the purpose of determining factorial") factorialIP = int(input()) def factorial(factorialIP): if factorialIP < 0: print ('Factorial does not exist') factor=0 return factor elif factorialIP == 0: factor=1 return factor print(factor) else: factor = 1 for j in range (1, factorialIP+1): factor = factor * j return factor print ("The factorial of the number is ", factorial(factorialIP))
Output:
1) Enter a number to determine factorial -4 Factorial does not exist The factorial of the number is 0 2) Enter a number to determine factorial 4 Factorial does not exist The factorial of the number is 24
The above python program to find factorial of a number takes the input of positive numbers only, and it does have a check of negative numbers in it using the if and else statement of python. In this program, the factor is 1 when j equals 1. When j is 2, the factor is multiplied with 2, and it will do the action till j comes at 4 to arrive at 24.
Factorial of a Number using Recursion
The following python code illustrates the factorial function using recursion. Let us take up the following python code that takes positive integers as input to determine the factorial of positive integers. In this example, a recursive function determines the factorial number.
Python code:
print("Enter a number for the purpose of determining factorial") def factorial(num2): if num2 < 0: return 'Factorial does not exist' elif num2 == 0: return 1 else: return num2 * factorial(num2-1) number1 = int(input()) print("The factorial of the number is",factorial(number1))
Output: –
Enter a number for the purpose of determining factorial 4 The factorial of the number is 24
The recursion can be explained as a concept wherein the function invoked in the python module can call itself again and again. It runs until the time the python condition present in the python module is satisfied, wherein the function invoked is passed with value.
In the above python program, the function number def factorial keeps calling itself recursively until and unless the number reaches zero. Once the number reaches zero, it initializes the number as 1, ending the recursion.
The following python code illustrates the factorial function using math.factorial(), which can be used by importing the math module.
This function does not accept negative integers, and it throws an error message of value error when float numbers are provided. Let us take up the following python code that takes positive integers as input to determine the factorial of positive integers.
Python code:
print("Enter a number for computing factorial") import math number1 = int(input()) print("The factorial is as computed comes out to be ") print(math.factorial(number1))
Output: –
Enter a number for computing factorial 4 The factorial, as computed, comes out to be 24
Algorithm for the Factorial Program in Python
Let us take an example that illustrates the concept of factorial.
For determination of factorial 5, follow the following steps: –
5! = 5 x (5-1) x (5-2) x (5-3) x (5-4) 5! =120
Here, 5! is expressed as 120.
The following diagram helps in understanding the algorithm of computing factorial, and in this case, let us take an example of factorial 4!
Application of Factorial in Python
Factorial of a number has a wide level of applications in mathematics. Here are important applications of Python:
- The python helps in computation, followed with print factorial in faster and more efficient terms than other available programming languages.
- The python code is easily understandable and can be replicated across different platforms, and the factorial python program can be incorporated in several mathematical model-building assignments.
Summary:
- Factorial of a number can be described as the product or multiplication of all positive integers equal to or less than the number for which the product or factorial is being determined.
- There are three ways in which the factorial of a number in python can be executed.
- Factorial computation using For Loop
- Factorial computation using recursion.
- Usage of user-defined function
- The factorial of a number is determined for a non-negative integer, and the results are always in positive integers.
- By exception of the rule, a zero factorial is at 1.
- Factorial of a number has a wide level of applications in mathematics.
Learn our next tutorial about Swap two numbers without using a third variable