profondeur maximum de récursivité dépassé en comparaison
J'ai écrit ce morceau de code pour calculer le nombre de combinaisons:
def fact(n):
return 1 if(n == 1) else n * fact(n - 1)
def combinations(n,k):
return fact(n)/((fact(n - k) * fact(k)))
while(True):
print(combinations(int(input()), int(input())))
La fonction factorielle semble bien fonctionner. Mais pourquoi est-il me donner un maximum de profondeur de récursion dépassé en comparaison d'erreur lorsque j'essaie de trouver des combinaisons de deux nombres? Est-il quelque chose de mal avec la fonction factorielle, car c'est là l'erreur semble provenir de l'?
C'était l'erreur que j'ai obtenu:
les builtins.RuntimeError: le maximum de la profondeur de récursion dépassé en comparaison
Et les 2 numéros.
Il n'y a rien de mal avec
et quel est le problème avec
Il n'y a rien de mal avec
math.factorial
?et quel est le problème avec
scipy.misc.comb
?OriginalL'auteur Daniel Cook | 2013-11-17
Vous devez vous connecter pour publier un commentaire.
Essayer de remplacer:
:
Parce que si vous passez à 2 chiffres identiques, vous essayez de calculer
fact(0)
(qui ferait appelfact(-1)
etfact(-2)
, etc jusqu'à ce que le maximum de la profondeur de récursion d'erreur).OriginalL'auteur Maxime Chéramy
Vous devriez essayer d'éviter la récursivité pour une telle fonction simple comme la factorielle d'un nombre. La récursivité est vraiment puissant, mais il est parfois galvaudé pour aucune raison.
Voici le code pour la version itérative de la fonction factorielle:
Avis que Maxime dit dans la réponse précédente, c'est exactement le problème que vous rencontrez: votre fonction ne contemple pas la factorielle de 0.
OriginalL'auteur ecampver
La valeur par défaut limite de la récursivité en python 3.x version est à partir de 2000 seulement, Si vous appelez la même fonction, encore et encore, plus de 2000 fois, vous allez obtenir le maximum de profondeur de récursion d'erreur. L'idéal serait d'écrire une logique sans récursivité. Mais Si vous avez encore le bâton à la récursivité, modifier la valeur par défaut limite de la récursivité par:
import sys
sys.setrecursionlimit(10000)# Il fixe la limite de la récursivité à 10000.
Mais le ci-dessus ne peuvent répondre à tous vos besoins dans certains contextes.
OriginalL'auteur Siva Kumar
Votre profondeur de Récursivité de la limite.
La récursivité n'est pas le plus idiomatique façon de faire les choses en Python, car il n'a pas la queue de la récursivité optimisation rendant ainsi impossible l'utilisation de la récursivité comme un substitut pour l'itération (même si dans votre exemple, la fonction n'est pas de la queue-récursif, ce qui n'aidera pas de toute façon). Essentiellement, cela signifie que vous ne devriez pas l'utiliser pour des choses qui ont une complexité supérieure linéaire si vous pensez que vos entrées pour être grand.
Si vous avez une plate-forme qui prend en charge une limite plus élevée, vous pouvez définir la limite supérieure:
sys.setrecursionlimit(some_number)
sys.setrecursionlimit(some_number)
Cette fonction de définir la profondeur maximale de l'interpréteur Python pile à la limite. Cette limite empêche de récursivité infinie de provoquer un dépassement de capacité de la pile C et de s'écraser Python. Le plus élevé possible de la limite est de la plate-dépendante. Un utilisateur peut avoir besoin de définir la limite supérieure quand elle a un programme qui nécessite une profondeur de récursivité et une plate-forme qui prend en charge une limite plus élevée. Cela doit être fait avec soin, car une trop haute limite peut conduire à un accident.
ref:
Python récursive de la fonction d'erreur: “maximum de la profondeur de récursion dépassé”
Python max récursivité , question à propos de sys.setrecursionlimit()
OriginalL'auteur hxysayhi
OriginalL'auteur user8301642