void count(int n){
static int d=1;
printf("%d",n);
printf("%d",d);
d++;
if(n>1) count(n-1);
printf("%d",d);
}
int main(){
count(3);
}
我是编程的新手,所以请帮助我理解,为什么即使在'if'语句为false之后输出还包含两个4,并且之后没有递归调用该函数?
答案 0 :(得分:3)
因为函数末尾有printf("%d",d);
。
此语句多次执行。
展开count(3)的递归调用,我们得到。
3
1
count(2)
d
进一步展开,我们得到。
3
1
2
2
count(1)
d
d
再次展开,我们得到了,
3
1
2
2
1
3
... recursion ends here
d
d
d
答案 1 :(得分:2)
进行递归调用时,不会将控制转移到永远调用的函数。如果在进行调用的函数中有一些未完成的工作,那么一旦递归调用结束,它将获得控制权以完成未完成的工作。
在您的情况下,"未完成的业务"是最后一次printf
电话。有三个count
的调用。第三次调用退出后,第二次调用将打印d
,即4
,然后退出。反过来,这会将控制权交还给第一次调用,再次打印4
。