| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 466 人关注过本帖
标题:这个递归怎么出来的为什么是 3 个值?
只看楼主 加入收藏
a1092909114
Rank: 2
等 级:论坛游民
帖 子:27
专家分:39
注 册:2014-4-18
结帖率:57.14%
收藏
已结贴  问题点数:20 回复次数:8 
这个递归怎么出来的为什么是 3 个值?
#include<stdio.h>

void fun (int m ,int n ){
if(m>=n) printf("%d",m);
else fun(m+1,n);
printf("%d",m);}

main()
{fun(1,2);}
2014-05-10 10:04
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
收藏
得分:4 
运行过程:
  fun(1,2)    -->             fun(2,2)
   输出1      <--    输出2,2(if后面和函数底部各输出1个值:2)

所以一共输出个3值:2 2 1
2014-05-10 10:18
a1092909114
Rank: 2
等 级:论坛游民
帖 子:27
专家分:39
注 册:2014-4-18
收藏
得分:0 
没懂   输出里面都是m的值 m的值好像没有1啊
2014-05-10 10:33
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:4 
能先理解 _递归_ 函数的执行流程么?无语……
2014-05-10 10:54
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
或者说,撸主的本意是这样?
void fun (int m ,int n ){
    if (m>=n) {
        printf("%d",m);
    }
    else {
        fun(m+1,n);
        printf("%d",m);
    }
}
2014-05-10 10:57
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
收藏
得分:0 
main()
{fun(1,2);}   < ---  第一层调用的m就是1呀.
2014-05-10 17:10
longxingxiu
Rank: 2
等 级:论坛游民
帖 子:73
专家分:64
注 册:2014-4-23
收藏
得分:4 
回复 楼主 a1092909114
fun(1,2)---{else fun(2,2),跳转去执行fun(2,2)了,但是注意fun(1,2)还没执行完,还有一条printf没有执行,执行fun(2,2)过程中会输出两个个m=2;最后把fun(1,2)还剩一条的printf支持执行完,此时的m还是1,因为fun(1,2)决定了传递过来的实参是m=1.
2014-05-10 19:09
sunnyooo
Rank: 1
等 级:新手上路
帖 子:1
专家分:4
注 册:2014-5-13
收藏
得分:4 
。。。。
为什么我运行了一下是两个值
2014-05-14 21:07
茅十八
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:35
专家分:123
注 册:2014-3-11
收藏
得分:4 
哥是玩VB的,递归的实质是代码嵌套,实现方法靠的是传递函数地址。不懂?没事,一起研究。
程序代码:
//分析如下:
/*
//这是第一步
int main()
{
    if(1>=2)
        printf("%d",1);
    else
        fun(1+1,2);// 把代码嵌套进来,效果如下
    printf("%d",1);
    return 0;
}
把fun(1+1,2)的代码嵌套进来后,就变成:
int main()
{
    if(1>=2)
        printf("%d",1);
    else
    ***************fun(1+1,2)展开后*********************
         if(1+1>=2)
            printf("%d",1+1);//条件满足,打印2
        else
           fun(2+1,2);
        printf("%d,1+1");  //你把这个打印 2 漏掉了!!!!!
    ****************************************************
    printf("%d",1);//第是原始的m=1!!!!!!!;
    return 0;
}


*/
带感叹号的地方,要注意看。


[ 本帖最后由 茅十八 于 2014-5-16 18:46 编辑 ]

个人QQ:1789851851,有学习问题,欢迎找我讨论,另外Win32 SDK开发群:179492890
2014-05-16 18:44
快速回复:这个递归怎么出来的为什么是 3 个值?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020682 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved