搜索
编程论坛
→
开发语言
→
C++论坛
→
『 C++教室 』
→ 递归函数怎么这么难理解啊
标题:
递归函数怎么这么难理解啊
只看楼主
阿冲
等 级:
论坛游民
帖 子:29
专家分:40
注 册:2009-10-5
结帖率:
75%
楼主
已结贴
√
问题点数:15 回复次数:6
递归函数怎么这么难理解啊
谁能帮忙讲解一下啊???
搜索更多相关主题的帖子:
递归
函数
2009-10-13 14:03
qq378166396
等 级:
论坛游民
帖 子:9
专家分:24
注 册:2009-8-25
第
2
楼
得分: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
等 级:
论坛游民
帖 子:67
专家分:42
注 册:2009-8-19
第
3
楼
得分:2
记住函数体内有自己调用自己的函数
2009-10-14 10:21
最左边那个
等 级:
业余侠客
威 望:
3
帖 子:97
专家分:201
注 册:2009-4-24
第
4
楼
得分:2
相信你听过一个故事:
从前有座山,山里有座庙,庙里有两个和尚,老和尚对小和尚讲了个故事:从前有座山,山里有座庙,庙里有两个和尚,老和尚对小和尚讲了个故事:.......
就这么循环下去,这就是递归!
2009-10-14 10:29
newCpp
来 自:火星
等 级:
职业侠客
威 望:
3
帖 子:256
专家分:375
注 册:2009-8-17
第
5
楼
得分:2
这玩意好像是有点晕,不过我发现一问题!
他好像在执行cout<<"n!="<<fact(n)<<endl;
这个地方的时候他会重新调用一下fact函数然后重新判断
不过有一点我也没搞明白,不是说动态的变量调用完成后就会消失的吗?
为什么他重新调用的时候也没有消失,难道他是
直接跳转到If语句的?
编程语言视频教程在线播放学习
2009-10-14 18:47
最左边那个
等 级:
业余侠客
威 望:
3
帖 子:97
专家分:201
注 册:2009-4-24
第
6
楼
得分: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
东海一鱼
等 级:
贵宾
威 望:
48
帖 子:757
专家分:4760
注 册:2009-8-10
第
7
楼
得分:2
每次递归调用所传入的参数是会占用‘栈’空间的,如果递归层数太深,‘栈’空间被消耗尽。递归同样失败。
‘栈’空间的压入、弹出就是个动态的过程。
举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-10-14 22:26
7
1/1页
1
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-288356-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 2.003892 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved