懂C的进来下

来源:百度知道 编辑:UC知道 时间:2024/06/16 16:41:08
请帮我分析一下这道题,为什么输出结果为136

#include <stdio.h>

fun(int x)

{ if(x/2>0) fun(x/2);

printf("%d",x);

}

main()

{ fun(6);printf("\n"); }

这个事递归算法,按参数6传递进去就是
if(6/2>0)
{
if(3/2)>0
{
if(1/2)>0
{
}
printf("%d",1);
}
printf("%d",3);
}
printf("%d",6);

因为printf("%d",x);在嵌套【 if(x/2>0) fun(x/2);】循环的后面。所以,最下层的最先输出

递归调用,第一次打印1第二次3,然后6。
第一次调用x1=6没有打印,调用第二次x2=3没有打印调用第三次x3=1打印返回,打印x2返回打印x1

fun函数中的printf("%d",x);
这条语句被执行了3次,也就是函数被调用中x的值分别是6,3,1.
主程序中的printf("\n"); 只是换行了。

你这是递归程序的输出,因为if(x/2>0)fun(x/2)
所以你输入6,会有fun(3),而fun(3)再次递归由于3/2>0,所以fun(1).但是由于
fun(1)中1/2不大于0所以不递归了,就输出了1,然后函数返回去,输出3,输出3后,fun(3)结束,回到了fun(6)中,输出6.
所以结果是136
有问题可以hi我