| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 564 人关注过本帖
标题:递归求助 怎么就弄不明白了 请各位指点
只看楼主 加入收藏
tengfei55
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2010-10-24
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:9 
递归求助 怎么就弄不明白了 请各位指点
5个人在一起,第五个人比第四个人大2岁,第四个人又比第三个人大2岁,第三个又不第二个大2岁,第二个又比第一个大2岁 第一个是10岁 求第5个人的岁数
程序如下
main()
{printf("%d",age(5));
}
int age(int n)
{int c;
if(n==1)c=10;
else c=age(n-1)+2;
return c;
}
我想知道程序是怎么执行的 我想知道age(1)
 到底怎么就变成10了? 还有为什么c不返回c=10的值 ?
那位高手帮我细细的分析一下  在下感激不尽 我一下午都没弄明白~~~
搜索更多相关主题的帖子: 递归 
2010-11-15 16:18
zzgzzg00
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:388
专家分:627
注 册:2010-8-2
收藏
得分:0 
为什么啊  不懂  同问

粗心是大敌
2010-11-15 18:36
shafeilong
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:236
专家分:1434
注 册:2009-3-21
收藏
得分:0 
    a(5)
=a(4)  +2
=a(3)+2  +2
=a(2)+2  +2  +2
=a(1)+2  +2  +2  +2
a(1)的时候return c=10;
然后回调
=10 + 2 +2+2+2
=a(2)+2  +2  +2
=a(3)+2  +2
=a(4)  +2
2010-11-15 18:43
tengfei55
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2010-10-24
收藏
得分:0 
那位高手 给详细解释下 在下不盛感激!!!!!!!!!!!!!!!!!
2010-11-16 10:16
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:0 
你就这样想:
这五个人中只有1号知道自己10岁,其余4个只知道自己比前面号码的人多2岁,
现在,5号问4号你几岁了,4号说你等下,4号转过头回3号你几岁了,3号对4号说你等下。。。。。
直到2号问1号你几岁了,1号告诉2号说他10岁,
然后二号就知道自己12岁了,2号接着就告诉正在等待的3号他12岁,这样一级一级的传上去。。。。直到4号告诉5号,5号再根据4号的年龄算出自己的。

迭代的是人,递归的是神。
2010-11-16 10:45
qwerwqily
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-11-16 11:51
heli717
Rank: 2
等 级:论坛游民
帖 子:13
专家分:32
注 册:2010-11-13
收藏
得分:0 
不明其奥妙,路过
2010-11-16 14:03
韭菜
Rank: 2
等 级:论坛游民
帖 子:51
专家分:94
注 册:2010-9-26
收藏
得分:0 
a[n]=a[n-1]-2;
a[1]=10;
n为大于1的整数
2010-11-16 16:17
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:0 
回复 楼主 tengfei55
你的递归函数还需要,声明不啊!  ^_^ 传进去 再传进去 再再传进去 再再返回 再返回 返回 这个要是你看懂了 我想递归你也懂了

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2010-11-16 16:59
xiaomarn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:348
专家分:2026
注 册:2009-3-18
收藏
得分:0 
这应该是尾部递归,用个while循环就可以很好的实现(占用的空间少,效率快)
#include<stdio.h>

int main()
{
      int i=1;
      int age=10;

      while(++i<=5)
            age+=2;
      printf("age=%d\n",age);
      getch();
      return 0;
}
但谭书(听6楼说的)非得搞个递归来实现,效果没达到还搞得大家一头雾水!
递归从本质上说就是自己调用自己
关键是结束条件(没有它,你就会不来)
也就是上面的if(n==1) return c=10;
递归的实现是通过运行时堆栈来实现
在这先传递一个n=5,age函数判断(通过if语句)它符合的条件(n=5!=1)
于是执行else语句(注意,它仅执行到else,而后面的return并未执行)再次调用age函数本身但输入的参数变了(n=n-1=4)
重复上面操作直到n==1
函数age获得确定的值10
此时由于执行的是语句c=10;
没有再执行自己调用自己的语句,于是后面的return c;得以执行,层层向上返回
得到最后值
画个堆栈看看:
图片附件: 游客没有浏览图片的权限,请 登录注册

递归调用时在未达到结束条件时,就将暂时值压入,再调用自己
而获得确定值是一层层返回
2010-11-16 17:59
快速回复:递归求助 怎么就弄不明白了 请各位指点
数据加载中...
 
   



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

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