0
votes

Fonction récursive simple ne donnant pas la sortie attendue

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

Imprimer 2 | n = 2-1 = 1 | 1> = 0 | Compte à rebours (1)

Imprimer 1 | n = 1-1 = 0 | 0> = 0 | Compte à rebours (0)

Imprimer 0 | n = 0-1 = -1 | -1 n'est pas> = 0 |

impression -1 | Fin xxx

Je m'attendais à obtenir: n = 2 n = 1 n = 0 n = -1

mais le code compilé me ​​donne: n = 2 n = 1 n = 0 n = -1 n = 0 n = 1

Je ne suis pas tout à fait sûr où les 0 et 1 supplémentaires viennent d'après -1

c

1 commentaires

Du deuxième printf dans la fonction.


3 Réponses :


0
votes

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)


1 commentaires

Merci si je peux demander cependant, pourquoi est -1 0 1 imprimé au lieu de -1?



1
votes

Votre code fait ce qui suit (omettant le si): xxx

pour n = 2: xxx


0 commentaires

0
votes

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


0 commentaires