C语言递归;输出结果12345 54321,问:54321怎么解释,求解?

#include<stdio.h>
void f(int a)
{
if(a<6)
{
printf("%d ",a);
f(a+1);
printf("%d ",a);
}
}
int main()
{
f(1);
return 0;
}
上课没好好听,回过神来,结束了,同学也不怎么懂,讲不清.......

这个就是函数的递归了。在函数内调用本身。
思路如下;
首先是a=1进入f(a),然后在f(a)中迭代自己,不过参数传入(a+1)也就是2,一直往下迭代,直至a=6,迭代进行不下去,执行上一层迭代没有执行完的代码,也就是输出a=5,4,3,2,1的代码,最终的结果也就如您所示的样子。
要是还不明白,就直接安装上面的程序画草图跟踪,不过建议将次数改为2或者3,因为迭代太多,你的头也不清楚了。呵呵呵
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-12-07
函数f(1):
    打印1
    函数f(2):
        打印2
        函数f(3):
            打印3
            函数f(4):
                打印4
                函数f(5):
                    打印5
                    函数f(6):
                        。。。<-这里不,因为没进入条件
                    打印5
                打印4
            打印3
        打印2
    打印1

第2个回答  2015-12-07
a的值是没有变化的,所以f函数中第一个输入与第二个输出是一样的
f(1)
{
printf("1");
f(2)
{
printf("2");
f(3)
{
printf("3");
f(4)
{
printf("4");
f(5)
{
printf("5");
f(6)
{if不成立,跳出}
printf("5");
}
printf("4");
}
printf("3");
}
printf("2");
}
printf("1");
}
相似回答