收录日期:2018/11/19 05:40:47 时间: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
谢谢各位的回答。。。好感动。。。。
大家都很强啊

java Web 调试问题 虚函数问题 转很多年前的一篇文章-----做 一 对 幸 福 的 老 鼠 请问大家c++ 中如何用算出来的数据画图,输出到可以打开的图形文件中去? 最牛的爆笑应聘 正则\"|\"操作符 Assembly对象能否保存成文件 _DEBUG 关于指针初始化的问题 识别卡片解决方案 进来,一定有你喜欢的一句话 发现神器! 【在沉默中爆发,在迷茫中抬头】O(∩_∩)O~后半夜抽风,写个感慨 三十句瞬间使你清醒的话 VC生成的EXE文件,在另外一台没有VC环境的机上能运行吗? 请教一个运行结果以及格式输出的问题 一台DC的故宫之旅——IXUS200表现不俗。 cstring.format 网站连接出现问题了 上海软件开发工资 紧急:我在VS2005中编辑好修改过的C#代码,按F5运行时还是按修改前的代码运行。怎么会出现这种意外情况啊? 请教一个数组表示问题 请教这句话的代码是什么意思,怎么理解 MySQL带临时表,游标的一个存储过程 金蝶中间件 待遇 在软件开发过程中,怎样划分工作,怎样整合各部分工作成果成为一个可用软件? asp.net处理过程 要上传服务器了,可是还有点问题没解决。郁闷啊 有什么方法可以很好的控制网页中的图片形状 智能排课系统