收录日期:2019/04/24 08:58:19 时间: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
谢谢各位的回答。。。好感动。。。。
大家都很强啊

一个ASPX页面怎么能调用两个类文件呀??就是说好多页面都要调一个头文件,那个头文件还要有一定的代码,请问应该如何做? 关于CAsyncSocket中的OnReceive函数的调用问题,谢谢! 急!上下键问题!!! 请回怎么在WINFORM里面嵌入网页?? asp程序打包 ACCESS数据库连接问题!! 各位有没有遇到插入几条记录后在数据库里顺序不一致的问题? 今天一个值得纪念的日子,我被拒绝了,长沙,我梦碎的地方!~~~~~~~` 问个简单问题:CPrintDialog如何限制纸张只能是横向? 怎么样才能在一个对话框中嵌套另一个对话框 如何用.net制作PPC上的安装程序,急 急问!请高手指点,水晶报表中的字段超链接到其他页面用querystring传递中文参数时为什么传递不全?少最后一个字 com调用问题 简单问题!!!请教 怎么动态创建DataGrid列 有关ejbselect()方法的使用? 关于一个SQL的关联的问题。 请教:图片插入sqlserver问题 谁知道那里有可以把数据表显示成波形图的图形控件vc++6.0 请问asp.net里有类似java sevlet的RequestDispatcher吗 zhonghua2003(爱我中华)总是说 \"为了文静,努力工作!!帮你顶!!\".谁能告诉我\"为了文静\"是什么意思? 寻找最简单的hibernate入门资料! 一个关于显示的问题 请教applet显示的问题 谁知道那里有vc++6可以使用的计数器控件,就像vb中那个事件控件,但是vc++可以使用的 为什么我总运行不了程序 高价求一张10.5号的卧铺票,北京到武汉的,我在北京. 如何实现这样的功能? 服务器上网问题 水晶报表初学者提问最基本问题