Désolé si je le faisais mal, je suis vraiment nouveau avec C et je n'ai pas utilisé le débordement de la pile avant. J'essaie de tracer cette seule fonction récursive à la main, mais d'obtenir une réponse différente du code compilé.
Mon processus de pensée était p>
Imprimer 2 | n = 2-1 = 1 | 1> = 0 | Compte à rebours (1) p>
Imprimer 1 | n = 1-1 = 0 | 0> = 0 | Compte à rebours (0) p>
Imprimer 0 | n = 0-1 = -1 | -1 n'est pas> = 0 | p>
impression -1 | Fin p> Je m'attendais à obtenir: n = 2 n = 1 n = 0 n = -1 p> mais le code compilé me donne: n = 2 n = 1 n = 0 n = -1 n = 0 n = 1 p> Je ne suis pas tout à fait sûr où les 0 et 1 supplémentaires viennent d'après -1 p> P>
3 Réponses :
Votre code n'a aucun problème. Il suffit de supprimer 2nd printf code>. StudyCpp.exe!countdown(int n) line 16 C++ // It is 2nd printf of countdown(2) after executed countdown(1).
StudyCpp.exe!main() line 21 C++ // It called countdown(2)
Merci si je peux demander cependant, pourquoi est -1 0 1 imprimé au lieu de -1?
Votre code fait ce qui suit (omettant le si): pour n = 2: p>
Ici, vous appelez de manière récursive et appelée trois fois.
En fait, chaque appel récursif poussera le compte à rebours () dans la pile.
n = 1 printed
Du deuxième
printf code> dans la fonction.