我有一个名为fun1()的函数,用于递归.我很困惑第一次打电话给这个有趣的( – n);.它会做什么以及每个函数完成后我的堆栈如何弹出我的函数?
void fun(int n) { if(n>0) { fun(--n); printf("%d",n); fun(--n); } }
我的主要功能如下:
int a; a=3; fun(a);
解决方法
您的输出将为0,然后是1,然后是2,然后是0.
>最初用3调用
>大于0,它调用fun( – n),这使它成为2.
>这一直持续到0.
>它继续到printf(),并向控制台输出0.
您没有看到的是中间调用.这是完整输出(在n> 0部分之前):
Fun call before n > 0; n = 3 Fun call before n > 0; n = 2 Fun call before n > 0; n = 1 Fun call before n > 0; n = 0 0 Fun call before n > 0; n = -1 1 Fun call before n > 0; n = 0 2 Fun call before n > 0; n = 1 Fun call before n > 0; n = 0 0 Fun call before n > 0; n = -1