Ваш код не имеет проблем.Просто удалите 2-й printf
код.
void countdown(int n)
{
printf("n = %d\t", n);
n--;
if (n >= 0)
countdown(n);
}
int main()
{
countdown(2);
return 0;
}
Результат:
n = 2 n = 1 n = 0
Это стэк вызова, когда я захватил на 2nd printf
.
StudyCpp.exe!countdown(int n) line 16 C++ // It is 2nd printf of countdown(0). Now, n is -1.
StudyCpp.exe!countdown(int n) line 14 C++ // It called countdown(0)
StudyCpp.exe!countdown(int n) line 14 C++ // It called countdown(1)
StudyCpp.exe!main() line 21 C++ // It called countdown(2)
Если вы выполняете отладку еще один, вы можете увидеть callstack, как показано ниже:
StudyCpp.exe!countdown(int n) line 16 C++ // It is 2nd printf of countdown(1) after executed countdown(0).
StudyCpp.exe!countdown(int n) line 14 C++ // It called countdown(1)
StudyCpp.exe!main() line 21 C++ // It called countdown(2)
И, если вы выполните отладку еще один, вы можете увидеть callstack, как показано ниже:
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)
И, наконец, Программа будет закрыта.