| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 856 人关注过本帖
标题:C语言简单函数递归调用问题
只看楼主 加入收藏
书生等待
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:280
专家分:689
注 册:2013-2-22
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:16 
C语言简单函数递归调用问题
//共有5位同学,第一个同学的年龄是10,并且后边的同学依次比前面的同学大两岁,求第五个同学年龄,使用递归调用函数
//运行无结果
#include<stdio.h>
int main()
{   
    int k;
    int age(int x,int num);
    k=age(10,5);
    printf("%d\n",k);
    return 0;
}

int age(int x,int num)
{
    int y;
    y=x+2;
    num--;
    while(num>1)
        age(y,num);//这里我想在num大于1的时候,还把y的值传递给x,num值传递个num,问题是出现在这里吗?
    return y;
}
搜索更多相关主题的帖子: return C语言 
2014-05-05 11:08
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
while(num>1)
        age(y,num);//这里我想在num大于1的时候,还把y的值传递给x,num值传递个num,问题是出现在这里吗?
----------既然是递归,为什么又加了个while循环?

总有那身价贱的人给作业贴回复完整的代码
2014-05-05 11:14
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:4 
未明白函数调用和变量生命周期,达不到正确递归的目的。
2014-05-05 11:18
书生等待
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:280
专家分:689
注 册:2013-2-22
收藏
得分:0 
回复 2 楼 embed_xuel
谢谢回答!
如果没有while的话,是不是会无限次递归?
我看谭浩强的书,他是反推的思想,也就是给出第一个人的年龄,然后反推回来,感觉意思就是用第一个人的年龄限制递归次数
所以这里我是想用while限制递归次数,不知道我这想法对不对
2014-05-05 11:19
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
不用 while,用 if 判断递归结束条件就可以了。
2014-05-05 11:21
书生等待
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:280
专家分:689
注 册:2013-2-22
收藏
得分:0 
回复 3 楼 top398
谢谢回答,能详细解释下否?
2014-05-05 11:25
书生等待
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:280
专家分:689
注 册:2013-2-22
收藏
得分:0 
回复 5 楼 top398
根据你的提示,把程序改成

#include<stdio.h>
int main()
{   
    int k;
    int age(int x,int num);
    k=age(10,5);
    printf("%d\n",k);
    return 0;
}

int age(int x,int num)
{
    int y;
    y=x+2;
    num--;
        if(num>1)
        age(y,num);
        else
        return y;
}

就对了,谢谢
2014-05-05 11:26
书生等待
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:280
专家分:689
注 册:2013-2-22
收藏
得分:0 
回复 5 楼 top398
那也就是说,其实我这里递归调用时,函数值的传递还是没有问题的
只是为什么只能用if结束,不能用while结束,我还不理解
2014-05-05 11:28
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
while 是多次循环,if 只是单次判断。你先前的代码
 while(num>1)
        age(y,num);
实际成了一个无限循环。因为:
1、当前num的值在循环里没有改变,条件总是为真。
2、递归调用改变的 num 和当前的 num 不是同一个变量。
3、递归调用里面也是一样的情况,只不过是每次递归调用时 num 比上次小 1 而已。
总之一直在作无限循环。
2014-05-05 11:36
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:2 
程序代码:
//共有5位同学,第一个同学的年龄是10,并且后边的同学依次比前面的同学大两岁,求第五个同学年龄,使用递归调用函数

#include<stdio.h>

int age(int x,int num)
{
    if( num==1 ) return x;
    age(x+2,--num);
}

int main()
{    
    int k;
    k=age(10,5);
    printf("%d\n",k);
    return 0;
}


[ 本帖最后由 wp231957 于 2014-5-5 14:49 编辑 ]

DO IT YOURSELF !
2014-05-05 14:47
快速回复:C语言简单函数递归调用问题
数据加载中...
 
   



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

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