| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2965 人关注过本帖
标题:递归函数怎么这么难理解啊
只看楼主 加入收藏
阿冲
Rank: 2
等 级:论坛游民
帖 子:29
专家分:40
注 册:2009-10-5
结帖率:75%
收藏
已结贴  问题点数:15 回复次数:6 
递归函数怎么这么难理解啊
谁能帮忙讲解一下啊???
搜索更多相关主题的帖子: 递归 函数 
2009-10-13 14:03
qq378166396
Rank: 2
等 级:论坛游民
帖 子:9
专家分:24
注 册:2009-8-25
收藏
得分:2 
简单点理解,递归函数数2个基本要素:一个是描述问题规模逐步缩小的递归算法,一个是描述基本情况的递归终止条件;
下面举个简单的例子 求n!

#include<iostream.h>

long fact(int n){
if(n==0) return 1;                //递归终止条件
else return n*fact(n-1);         //递归调用
}


void main(){
int n;
cout<<"input n:";
cin>>n;
cout<<"n!="<<fact(n)<<endl;
}

调用参数 n-1 使问题缩小
2009-10-13 14:19
jjg
Rank: 2
等 级:论坛游民
帖 子:67
专家分:42
注 册:2009-8-19
收藏
得分:2 
记住函数体内有自己调用自己的函数
2009-10-14 10:21
最左边那个
Rank: 4
等 级:业余侠客
威 望:3
帖 子:97
专家分:201
注 册:2009-4-24
收藏
得分:2 
相信你听过一个故事:
从前有座山,山里有座庙,庙里有两个和尚,老和尚对小和尚讲了个故事:从前有座山,山里有座庙,庙里有两个和尚,老和尚对小和尚讲了个故事:.......

就这么循环下去,这就是递归!
2009-10-14 10:29
newCpp
Rank: 5Rank: 5
来 自:火星
等 级:职业侠客
威 望:3
帖 子:256
专家分:375
注 册:2009-8-17
收藏
得分:2 
这玩意好像是有点晕,不过我发现一问题!
他好像在执行cout<<"n!="<<fact(n)<<endl;
这个地方的时候他会重新调用一下fact函数然后重新判断
不过有一点我也没搞明白,不是说动态的变量调用完成后就会消失的吗?
为什么他重新调用的时候也没有消失,难道他是
直接跳转到If语句的?

编程语言视频教程在线播放学习
2009-10-14 18:47
最左边那个
Rank: 4
等 级:业余侠客
威 望:3
帖 子:97
专家分:201
注 册:2009-4-24
收藏
得分:5 
他好像在执行cout<<"n!="<<fact(n)<<endl;
这个地方的时候他会重新调用一下fact函数然后重新判断

对,就是这样的,详细的说,应该是从第一次执行fact(n)以后,进到函数体里,会不断的调用fact函数,直到遇到终止信息!

另外个人觉得这里没有动态开辟什么啊?你认为哪个是动态开辟的变量呢?

现在退一步老说,就算有吧,我认为是这样的,当遇到fact(n)的时候,实参n传递给形参,然后就执行里面的函数,就算每次都重新调用,但是你可以理解为这全部调用都属于一个整体的大函数,是不可分割的,这样的话,所谓的变量调用完成,就是cout<<"n!="<<fact(n)<<endl这里的fact(n)函数完成,也就是main函数基本结束了,这时候也确实释放动态开辟的东西!
2009-10-14 20:05
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:2 
每次递归调用所传入的参数是会占用‘栈’空间的,如果递归层数太深,‘栈’空间被消耗尽。递归同样失败。

‘栈’空间的压入、弹出就是个动态的过程。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-10-14 22:26
快速回复:递归函数怎么这么难理解啊
数据加载中...
 
   



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

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