收录日期:2019/01/21 20:46:18 时间:2016/07/26 20:16:49 标签:C语言
#include "stdio.h"
   

fun (int x)
{
if(x/2>0)
fun(x/2);
printf("%d",x);

}

main()
{
 fun(6);
}
这个题的运行结果是:1 3 6。请问这个是怎么回事呢??
fun (int x)
{
if(x/2>0)
fun(x/2);
printf("%d",x);

}
首先x=6,要调用fun(6/2);在运行printf();
调用函数fun(6/2)要先fun(3/2)
结果就是1 3 6
LZ的函数的函数调用可用如下过程表示:{}内的事fun(6),fun(3),fun(1)的内容,按照如下所说的执行顺序依次输出1、3、6
fun(6)
{
    fun(3);
    {
         fun(1);
         {
            if条件不成立故直接执行下一条语句
            printf(1);
         }
         printf(3);
    }
    printf(6);
}
fun(6) 入栈, fun(3) 入栈, fun(1) 入栈

1出栈 , 3 出栈, 6出栈  

递归
引用 1 楼 orangeii 的回复:
fun (int x)
{
if(x/2>0)
fun(x/2);
printf("%d",x);

}
首先x=6,要调用fun(6/2);在运行printf();
调用函数fun(6/2)要先fun(3/2)
结果就是1 3 6


你要看看/和>谁的优先级高,它是循环调用函数,只要满足条件在fun()函数中,当然就那样输出了!
看来楼主是不理解递归,好好的看递归去
递归与栈联系的很紧,lz可以,看下栈的知识,在纸上画一下,进栈出栈的过程……
递归。。从最后一层开始输出。。最里层1然后是3然后才是6
自己在纸上算算就知道了。
int x ,所以当x=1时,x/2 = 0;
所以递归函数的执行顺序是
fun(6) 入栈, fun(3)入栈, fun(1)入栈;
printf( x = 1) ; fun(3)出栈,printf(x=3)
fun(6)出栈,printf(x=6);

还有,递归的执行和子函数执行时一样的,局部变量和地址要入栈,然后再按顺序出栈;
递归, 
和递归的还原点
引用 2 楼 wangmm2008 的回复:
LZ的函数的函数调用可用如下过程表示:{}内的事fun(6),fun(3),fun(1)的内容,按照如下所说的执行顺序依次输出1、3、6
fun(6)
{
  fun(3);
  {
  fun(1);
  {
  if条件不成立故直接执行下一条语句
  printf(1);
  }
  printf(3);
  }
  printf(6);
}


说得很详细,还带数据说明,赞
递归,从最里层往外
刚开始x=6,  因为x/2=3  >0   进入fun(x/2) ,这时注意 printf()那句还没执行,要先进入fun(x/2)
此时x=(x/2)=3   ,x/2=3/2>0 和上面一样继续进入  fun(x/2)=f(3/2)=f(1)     此时x=1,x/2=0,不符合>0 的条件,则执行下一语句 printf(),因为x=1,所以打印出  1   , 那么fun(x==3)那步执行好了,这继续执行 printf(x==3), fun(x==6)这步执行好后,继续执行printf(x==6),  这是一个递归函数,看来楼主刚开始学没多久
递归啊
嗯,蛮好的列子。
懂了这里就基本晓得什么叫递归了~
递归调用
栈,从最里层往外
结果就是1、3、6
谢谢各位的回答。。。好感动。。。。
大家都很强啊

如何在提交Button后,延迟提交??? vc 判断光标是否在wps表格内 [CC]ALBD服务启动以后,5秒以后自动停止 电脑显示时有时无 JAVE我是一个新手,如何学习?才能学好。 蓝牙问题 如何将字符串转换为字符串数组? 残酷的现实 明天回家,最后一天上班,把最后的72分全散了,大家新年快乐 SWING高手指教本地鼠标怎么获得 Web中获取值的问题 请大家推荐几本C++的书籍 回家倒计时,还有4天啊。发个贴记念一下,也祝各位能够回家过个开心的年。 带领人民面对敌人和困难一往无前的民族气概 TdxBarManager中动态创建TdxBarLargeButton 如何把MySQL置于只读(不使用read_only变量)? Flex 学习交流群--志同道合者的理想学习平台 问个高难问题,谁知道如何用C#关闭和打开显卡硬件加速? 四色算法 mysql导入时出现乱码 遇见朵朵的第七十五天 急!!!!!!想在指定的行列所在的单元格内放置图片,请高手帮看看如何实现! c++primer第四版提问!!! 如何导出文件(在线等) 调查:关于EXT与ComponentArt的优缺点以及一般范围 c# 水晶报表 sql2005 因今日水贴太少特散分充数(13) 请问如何得到数据集总数 脑筋急转弯(四) 瞧一瞧,看一看,不要错过,小弟跪求一个问题,已经困扰几天了,请各位高手帮忙