以下程序运行后的结果是:
fun(int x)
{ if (x/2>0) fun(x/2);
printf("%d",x);
}
main()
{fun(6);
}
请大家看看这个题目,可以帮我分析下吗?(谢谢)
[此贴子已经被作者于2007-10-31 14:14:41编辑过]
----------------解决方案--------------------------------------------------------
结果应该为0吧,个人见解!
----------------解决方案--------------------------------------------------------
结果不正确! 是函数的递归调用,多次~~
----------------解决方案--------------------------------------------------------
我运行结果是 1 3 6
递归调用我没学过,1我知道怎么来的,3和6就不知道了
----------------解决方案--------------------------------------------------------
答案是 1 3 6
我也不知道怎么来的,好像多次调用,要是头转快点就好啦
----------------解决方案--------------------------------------------------------
明天晚上在探讨,先睡了,明天还上课呢,我去问问我们老师哈;
晚安
----------------解决方案--------------------------------------------------------
*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 http://www.bc-cn.net
*/ 作者: hanzhu3366 QQ:136514900
*/ 时间: 2007-10-29 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------
以下程序运行后的结果是:
fun(int x)
{ if (x/2>0) fun(x/2);
printf("%d",x);
}
main()
{fun(6);
}
请大家看看这个题目,可以帮我分析下吗?(谢谢)
一共递归调用了3次.
工作过程可看成这样:
1. 当fun(6)时,满足(x/2>0) 调用fun(x/2)也就是调用fun(3) //注意,满足条件(x/2>0)执行fun(3),要等执行了fun(3)才执行fun(6)的printf语句;
2.执行fun(3)时,也满足(x/2>0) 调用fun(x/2)也就是调用fun(1) //注意,满足条件(x/2>0)执行fun(1),要等执行了fun(1)才执行fun(3)的printf语句;
3.执行fun(1)时,不满足(x/2>0),就跳到下边执行printf("%d",x);
所以执行顺序为:
fun(1)的x=1;
fun(3)的x=3;
fun(6)的x=6;
故输出136
[此贴子已经被作者于2007-10-29 1:26:40编辑过]
----------------解决方案--------------------------------------------------------
计算机可不像人那样,会遗漏什么.
有时候人也应该要学习计算机的严谨.
----------------解决方案--------------------------------------------------------
版主分析的很清楚了,原来递归原理是这样的!!
----------------解决方案--------------------------------------------------------
支持7楼说明
注意深入理解递归在系统中是如何实现的
简单说就是 利用了栈 详细请看 严姐姐的数据结构一书 在说汉诺塔问题时 说明了
按栈去理解递归就很简单了
----------------解决方案--------------------------------------------------------