- Вычисление факториала циклом
- Нахождение факториала рекурсией
- Функция factorial() модуля math
- 3 ответов
- 16 ответов
- Существующее решение
- Построение собственных
- Из соображений производительности, пожалуйста, не используйте рекурсию. Это было бы катастрофично.
- Проверьте результаты бега
- Или Использование для цикла
- Проверьте результаты бега
- Или используя встроенную функцию математики
- Проверьте результаты бега
Факториалом числа называют произведение всех натуральных чисел до него включительно. Например, факториал числа 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 для абсолютного новичка и сталкиваются с проблемой.
Я хотел бы рассчитать факториал с помощью процедуры.
- запрос пользователя на ввод неотрицательного числа n
- затем используйте 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]
Также работает одна строка, быстрые и большие числа:
Многие из этих методов очень хороши, но я бы сказал, что ваш лучший выбор – всегда использовать встроенную функцию. Однако есть очень легко создаваемые, если вы хотите увидеть, что происходит. Быстрый, который я придумал, почти так же, как и многие из них здесь.
Это довольно эффективный код, преимущество в том, что список создается, если вы не будете манипулировать некоторыми данными из списка, хотя я не уверен, почему вы действительно это делаете.
Изменить: только что увидел, что я разместил это на старой вещи. К сожалению.