En C ce code fonctionne, ici je n'ai pas utilisé return en appelant récursivement la fonction. Il donne une sortie correcteoù utiliser return en récursion
int gcd(int a, int b)
{
if(b == 0)
return a;
gcd(b, a % b);
}
Mais, si je vous écris même code en python ce code renvoie Aucun (je pense que la valeur doit être renvoyée de l'instruction de retour à l'intérieur si la condition)
def gcd(a, b):
if b == 0:
return a
gcd(b, a % b)
Pour rendre ce code travail, je dois ajouter retour
def gcd(a, b):
if b == 0:
return a
return gcd(b, a % b)
mais pourquoi? Quelle est la différence entre l'exécution de code en C et Python sous le capot? le code en C fonctionne aussi si j'ajoute un retour supplémentaire en appelant récursivement, Pourquoi ne renvoie-t-il pas une erreur?
En C chaque chemin d'exécution d'une fonction non-vide doit retourner une valeur. –
Règle principale en programmation: le simple fait qu'un programme produise des résultats corrects chaque fois que vous l'avez exécuté jusqu'à présent ne signifie pas que le programme est correct. Vous avez eu de la chance dans le premier cas. Une seule valeur 'int' est typiquement retournée dans l'accumulateur primaire (' ax' dans ce cas si c'est x86) et votre 'return a' qui conclut que toute la récursivité passe un résultat dans' ax' qui revient à chaque appel de retour, inchangé (puisque votre appel récursif 'gcd' est la dernière chose que vous faites). Techniquement, vous devriez avoir 'return gcd (b, a% b)' pour que ce soit un comportement bien défini. – lurker
[Notions de base sur la récursivité en Python] (https://stackoverflow.com/q/30214531/2823755), SO Q & A. – wwii