这个是一个递归算法,fun函数不断的调用自身,最开始k=5,于是调用fun(4),但是fun(5)还没执行完,fun(4)里继续调用fun(3),直到fun(0)时,直接输出0,然后函数返回上层,即fun(1),而fun(1)已经执行完if语句,直接输出1,同理,函数不断返回上层,最上层的函数是fun(5),所以直到输出5后,整段函数执行完毕
#include
void main()
{
int w=5;
void fun(int);
fun(w);//调用fun子函数,传递5
printf("\n");
}
void fun(int k)
{
if (k>0) //判断传递的值,如果大于0则调用自身
{
fun(k-1);//递归调用
}
else
{
return 0;//加上这几句就会输出1,2,3,4,5.因为程序fun(0)时没返回而是执行下面的语句,于是0也进行了输出
}
/*
*fun(5),fun(4),fun(3),fun(2),fun(1),fun(0),当到了fun(0)时条件才不满足大于0,才输出,0,1,2,3,4,5
*/
printf("%d",k);
}
程序有错误吧。。
void fun(int k)
{if (k>0) fun(n-1);//这里的n-1应该是k-1的。。
printf("%d",k);
}
这是个迭代程序,对于初始值w而言,就会迭代w步,每次在进行fun()运算,直到输入的值为0,然后再依次打印到屏幕上
fun(n-1);
printf("%d",k);
关键在这里,是先调用自身,在打印
所以啊,那么就是在最后没法再调用自身的时候打印k,这是k是0,接着一层一层的返回到上一个调用它的地方,结束调用,打印
那么就是从小到大了
递归调用,直到k=0的时候,才会执行printf("%d",k);