Comment calculer une factorielle d'un entier en Python?
135
Le moyen le plus simple est d'utiliser math.factorial
(disponible dans Python 2.6 et supérieur):
import math
math.factorial(1000)
Si vous voulez / devez l'écrire vous-même, vous pouvez utiliser une approche itérative:
def factorial(n):
fact = 1
for num in range(2, n + 1):
fact *= num
return fact
ou une approche récursive :
def factorial(n):
if n < 2:
return 1
else:
return n * factorial(n-1)
Notez que la fonction factorielle n'est définie que pour les entiers positifs, vous devez donc également vérifier cela n >= 0
et cela isinstance(n, int)
. Si ce n'est pas le cas, augmentez respectivement a ValueError
ou a TypeError
. math.factorial
prendra soin de cela pour vous.
factorial
dans lafactorial
fonction. Comment pouvez-vous utiliser la même fonction dans la fonction que vous définissez actuellement? Je suis nouveau sur Python donc j'essaye juste de comprendre.RecursionError
pour tout nombre supérieur à 998 (essayezfactorial(999)
) à moins que vous n'augmentiez la limite de récursivité de PythonSur Python 2.6 et supérieur, essayez:
la source
float
à cette fonction lèvera unDeprecationWarning
. Si vous voulez faire cela, vous devez convertir explicitement enn
unint
:,math.factorial(int(n))
qui supprimera tout ce qui suit la décimale, vous voudrez peut-être vérifier celan.is_integer()
Pas vraiment nécessaire car c'est un fil si vieux. Mais j'ai fait ici une autre façon de calculer la factorielle d'un entier en utilisant une boucle while.
la source
num = num * n
position de ligne avecn = n - 1
et que j'exécute cecifor i in range(1, 5): print('Factorial of', i, 'is', factorial(i))
Pour chaque factoriel, le résultat est 0. Je voudrais savoir pourquoi ilnum = num * n
faut passer en premier. Merci!!Solution existante
La solution la plus courte et probablement la plus rapide est:
Construire le vôtre
Vous pouvez également créer votre propre solution. En général, vous avez deux approches. Celui qui me convient le mieux est:
(cela fonctionne aussi pour des nombres plus grands, lorsque le résultat devient
long
)La deuxième façon d'y parvenir est:
la source
la source
factorial(999)
(et plus) augmentera a àRuntimeError
moins que vous n'augmentiez la limite de récursivité de PythonSi vous utilisez Python2.5 ou une version antérieure, essayez
pour Python plus récent, il y a factoriel dans le module mathématique comme indiqué dans d'autres réponses ici
la source
reduce
été supprimée de Python 3.from functools import reduce
la source
En utilisant une
for
boucle, en comptant à rebours depuisn
:la source
Pour des raisons de performances, veuillez ne pas utiliser la récursivité. Ce serait désastreux.
Vérifier les résultats en cours
L'utilisation de la pile est pratique (comme un appel récursif), mais cela a un coût: stocker des informations détaillées peut prendre beaucoup de mémoire.
Si la pile est élevée, cela signifie que l'ordinateur stocke beaucoup d'informations sur les appels de fonction.
La méthode n'occupe que la mémoire constante (comme l'itération).
Ou en utilisant la boucle for
Vérifier les résultats en cours
Ou en utilisant les fonctions mathématiques intégrées
Vérifier les résultats en cours
la source
la source
Voici mon essai
la source
Une ligne, des nombres rapides et grands fonctionne également:
la source
Je sais que cela a été répondu, mais voici une autre méthode avec une compréhension de liste de plage inversée, rendant la plage plus facile à lire et plus compacte:
Vous pouvez voir une version complète du code dans cet essentiel: https://gist.github.com/sadmicrowave/d4fbefc124eb69027d7a3131526e8c06
la source
[n for n in range(num, 0, -1)]
,range
est déjà itérable.Une autre façon de le faire est d'utiliser
np.prod
ci-dessous:la source
Factorielle d'un entier positif n, noté n !, est le produit de tous les nombres entiers positifs inférieurs ou égaux à n.
Formule :
n! = n * (n-1) * (n-2) * (n-3) * (n-4) * ....... * 1
Il existe plusieurs méthodes pour trouver la factorielle en python en utilisant la fonction / bibliothèque intégrée, etc. Ici, j'ai créé une fonction définie par l'utilisateur avec référence à la définition de base de la factorielle.
Nous pouvons également implémenter la fonction factorielle en utilisant la
recursive
technique ci-dessous. Mais cette méthode n'est efficace que pour les petites valeurs entières. Parce qu'en récursion, la fonction est appelée à plusieurs reprises et nécessite un espace mémoire pour maintenir la pile, ce qui n'est pas une approche efficace ou optimisée pour les grandes valeurs entières pour trouver la factorielle.la source
la source
Dans le code ci-dessous, je prends l'entrée du nombre dont je veux calculer la factorielle, après cela je multiplie le -> nombre dont nous voulons calculer la factorielle avec des nombres à partir de 1,2, ...., (nombre dont la factorielle Je veux calculer -1)
la source