Формула факториала в питоне

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

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

n! = 1 * 2 * … * n,

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

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

n! = 1 * … * (n-2) * (n-1) * n,

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

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

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

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

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

0 шаг. Вызов функции: fac(5)
1. fac(5) возвращает fac(4) * 5
2. fac(4) => fac(3) * 4
3. fac(3) => fac(2) * 3
4. fac(2) => fac(1) * 2
5. fac(1) => 1
6. 1 * 2 – возврат в вызов fac(2)
7. 2 * 3 – fac(3)
8. 6 * 4 – fac(4)
9. 24 * 5 – fac(5)
10. Возврат в основную ветку программы значения 120.

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

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

Я новичок в Python и в настоящее время читаю на Python 3 для абсолютного новичка и сталкиваются с проблемой.

Я хотел бы рассчитать факториал с помощью процедуры.

  1. запрос пользователя на ввод неотрицательного числа n
  2. затем используйте for loop для вычисления факториала

в то время как я хотел бы добавить функцию, чтобы проверить, является ли входной номер N неотрицательное число. например:

Читайте также:  Что означает серая дорога в яндекс навигаторе

Я хочу, чтобы пользователь снова ввел N, если это не неотрицательное число.

Спасибо за вашу нежную помощь.

3 ответов

конструкция может выглядеть так:

В Python 3, input() возвращает строку. Вы должны преобразовать его в число во всех случаях. Ваш N != int(N) таким образом, нет смысла, так как вы не можете сравнить строку с int.

вместо попробовать чтобы преобразовать его в int напрямую,и если это не сработает, пусть пользователь снова войдет. Это отклоняет числа с плавающей запятой, а также все остальное, что недопустимо как целое число.

в математической библиотеке Python есть факториальная функция. Вы можете использовать его так:

поскольку вы хотите вычислить с помощью цикла, однако, вы рассмотрели следующее?

обратите внимание, что второе решение не работает для N = 0, где ans = 1 является правильным по определению факториала.

вы можете проверить математический модуль для python.

вернуться х факторный. Повышает ValueError, если x не является интегралом или отрицательным.

95 Nir Levy [2011-02-28 01:22:00]

Как мне вычислить факториал целого в Python?

16 ответов

142 schnaader [2011-02-28 01:24:00]

Самый простой способ: math.factorial(x) (доступно в 2.6 и выше).

Если вы хотите/должны сами написать его, используйте что-то вроде

или что-то более читаемое:

Как всегда, Google – ваш друг;)

85 Joril [2011-02-28 01:25:00]

В Python 2.6 и выше попробуйте:

22 ciziar [2012-11-02 02:23:00]

Не обязательно, так как это такой старый поток. Но я сделал здесь еще один способ вычислить факториал целого числа, используя цикл while.

15 Tadeck [2012-01-29 03:12:00]

Существующее решение

Самое короткое и, вероятно, самое быстрое решение:

Построение собственных

Вы также можете создать собственное решение. Как правило, у вас есть два подхода. Тот, который мне подходит лучше всего:

Читайте также:  Что позволяет узнать кнопка статистика в ворде

(он работает также для больших чисел, когда результат становится long )

Второй способ достижения этого:

7 Nishanth [2013-10-19 14:51:00]

Если вы используете Python2.5 или старше, попробуйте

для нового Python, в математическом модуле есть факториал, как указано в других ответах здесь.

4 rahulm [2013-07-25 04:15:00]

Еще один метод вычисления факториала с использованием цикла for-loop –

2 Jordan [2011-02-28 01:27:00]

Вы имеете в виду:

2 binbjz [2018-03-29 12:50:00]

Из соображений производительности, пожалуйста, не используйте рекурсию. Это было бы катастрофично.

Проверьте результаты бега

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

Если стек высок, это означает, что компьютер хранит много информации о вызовах функций.

Метод занимает только постоянную память (как итерация).

Или Использование для цикла

Проверьте результаты бега

Или используя встроенную функцию математики

Проверьте результаты бега

Вот моя попытка

Я знаю, что на этот вопрос ответили, но вот еще один метод с пониманием обратного списка диапазонов, делающий диапазон более легким для чтения и более компактным:

0 [2018-05-14 18:58:00]

Также работает одна строка, быстрые и большие числа:

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

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

Изменить: только что увидел, что я разместил это на старой вещи. К сожалению.

Оцените статью
Добавить комментарий

Adblock detector