循环里面的递归无法理解!

来源:百度知道 编辑:UC知道 时间:2024/05/14 03:36:04
void fun(int);
main()
{
fun(3);
getch();
}

void fun(int a)
{
int i;
printf("%d ",a);
for(i=0;i<a;i++)
fun(a - 1);
}

这个程序的运行结果是:3 2 1 0 1 0 2 1 0 1 0 2 1 0 1 0
这到底是怎么回事啊~~郁闷当中。。。无法理解。。高人指点一二吧。。。
最好把怎样运行说一说。。。。。
3 2 1 0 1 0 这几个输出可能懂。。就是后面怎么还会输出2来。。还有一大堆。。。不懂啊。。

看了很久。。还是不懂。。单步执行也看了。。帮帮好好讲讲吧。。。

这么讲吧:
fun(3);//初始调用时,a值等于3

为了方便说,后面调用fun函数时,a值等于几,就叫几号递归
fun(3)//3号递归开始执行
运行printf("%d ",a); //输出3
运行for循环,i=0,i<3,
调用fun(3-1)

fun(2)//2号递归开始执行
运行printf("%d ",a); //输出2
运行for循环,i=0,i<2,
调用fun(2-1)

fun(1)//1号递归开始执行
运行printf("%d ",a); //输出1
运行for循环,i=0,i<1,
调用fun(1-1)

fun(0)//0号递归开始执行
运行printf("%d ",a); //输出0
运行for循环,i=0,i<0,不成立

------------------------>至此,输出了3,2,1,0

0号递归不成立后,回归1号递归的for循环处,进行i++处理,
运行for循环,i=1,i<1,不成立

1号递归不成立后,回归2号递归的for循环处,进行i++处理,
运行for循环,i=1,i<2,
调用fun(2-1)
再度运行fun(1)//1号递归
从上面可以看出,1号递归的运行会输出1,0

------------------------>至此,输出了3,2,1,0,1,0

1号递归不成立后,回归2号递归的for循环处,进行i++处理,
运行for循环,i=2,i<2,不成立

2号递归不成立后,回归3号递归的for循环处,进行i++处理,
运行for循环,i=1,i<3,
调用fun(3-1)
再度运行fun(2)//2号递归
从上面可以看出,2号递