-4
votes

Qu'est-ce que la récursive en python

J'ai appris à la récursion et j'ai décidé d'écrire un script Python qui imprimerait "Hello" et s'appliquerait à nouveau, mais il continue à imprimer "Bonjour" jusqu'à ce que Python lance RuntimeError: une profondeur de récursive maximale dépassée .

Je ne comprends pas très bien la récursion, donc si quelqu'un pouvait me l'expliquer et pourquoi Python lance cette erreur. Comment ça marche et comment puis-je le réparer? xxx


4 commentaires

Mieux vaut ajouter du code que vous utilisez pour la récursivité


"J'ai appris à la récursion et j'ai décidé d'écrire un script python" et "je ne comprends pas très bien la récursion, donc si quelqu'un pouvait l'expliquer". Alors essayez de lire à nouveau sur la récursion. Aussi poster votre code


Si vous voyez beaucoup de "bonjour", votre récursion fonctionne correctement. Étant donné que chaque fonction exécutée a besoin de la mémoire pour les variables et la récursivité peut exécuter beaucoup de fonctions et utiliser beaucoup de mémoire afin que Python ait une restriction au nombre de récursions pour ne pas utiliser toute mémoire.


Fonction de défaut (): imprimer ('Hello') Fonction ()


3 Réponses :


0
votes

L'interprète Python limite les profondeurs de la récursivité pour vous aider à éviter les récursions infinies, entraînant des débordements de pile. Essayez d'augmenter la limite de récursion (sys.settrecursionlimit) ou réécrivez votre code sans récursion.

sys.getrecursionlimit ()

Renvoie la valeur actuelle de la limite de récursion, la profondeur maximale de la pile d'interprète Python>. Cette limite empêche la récursion infinie de provoquer un débordement de la pile c et crash de python. Il peut être défini par setrecursionlimit ().


0 commentaires

0
votes

Récursion est essentiellement une fonction s'appelant elle-même. Considérons la fonction que vous avez parlé de: xxx

ici, la fonction hellofunc () conserve l'impression "Hello World!" et s'appelant indéfiniment comme vous n'avez pas précisé aucune condition à sortir de cela. Les appels de fonction sont stockés sur la pile. Donc, pendant la récursion, l'appel de la fonction parent est poussé sur la pile à chaque fois que l'autre Hellofunc () est appelée. Puisque vous n'avez pas spécifié de limite ni de condition à la sortir, le nombre maximum d'appels de fonction placés sur la pile est dépassé ou en d'autres termes, la pile d'appels de fonction a atteint sa profondeur maximale. Ceci s'appelle la profondeur de récursion maximale. Pour éviter cela, vous pouvez faire quelque chose comme: xxx

si vous faites xxx

la sortie serait: xxx

espère que cela aide!


1 commentaires

Ça faisait! Merci beaucoup que je comprends maintenant



0
votes

Vous pouvez obtenir plus d'informations sur le runtimeError ici . En ce qui concerne les fonctions récursives, lisez cette Chapitre


0 commentaires