| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1530 人关注过本帖
标题:[求助]初学递归。
只看楼主 加入收藏
a8451727
Rank: 1
等 级:新手上路
帖 子:238
专家分:5
注 册:2007-5-22
结帖率:86.67%
收藏
 问题点数:0 回复次数:24 
[求助]初学递归。

例如计算阶乘:

int factorial(int n)
{
assert(n>=0);
if(n==0)
return 1;
else
return n*facotorial(n-1);}

我看了很久也不明白他的意思。
他调用本身,哪个是他本身?if(n==0) return 1; 这个?
facotorial(n-1)的值是什么?还要往上推算?怎么可以单单从if(n==0) return 1;得来的?

或者有人拿一道,你觉得更易懂的例子指点下吗


搜索更多相关主题的帖子: 递归 初学 int return 
2007-07-05 15:26
cclearner
Rank: 1
等 级:新手上路
帖 子:74
专家分:0
注 册:2007-6-28
收藏
得分:0 
本身就是整个函数本身
相当于把n-1代到本来是n的位置
也就是下一次运算是相当于计算
n*(n-1)*facotorial(n-2)
并且当有具体的n为某个数时就是每次递减一的数了


我也是菜鸟!!!自己悟的。不知道对不对。
请高手指教。

不过为什么每次递减完的数都保存了状态呢?也就是省掉了循环递减,我不明白阿!

好人哪,一群好人哪!!!!!!
2007-07-05 16:33
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
不过为什么每次递减完的数都保存了状态呢?也就是省掉了循环递减,我不明白阿!

梯归有个压栈的过程,当前次调用的变量信息被栈储存。

Fight  to win  or  die...
2007-07-05 16:52
cclearner
Rank: 1
等 级:新手上路
帖 子:74
专家分:0
注 册:2007-6-28
收藏
得分:0 
哦,被存了?仅限这种楼主写的递归形式么?(不知道还有没有别的形式)
压栈?哦,头一次听,没学,

好人哪,一群好人哪!!!!!!
2007-07-05 16:55
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
回复:(cclearner)哦,被存了?仅限这种楼主写的递归...
不是,所有的递归都有栈操作的过程。
尾部递归在有的编译器中,没有压栈操作。

递归很难理解,加油吧。多看书。

Fight  to win  or  die...
2007-07-05 17:04
a8451727
Rank: 1
等 级:新手上路
帖 子:238
专家分:5
注 册:2007-5-22
收藏
得分:0 
那Fibonacci数列该如何用递归写?
应该不是 n+Fibonacci(n-1)了吧?
头都大了


2007-07-05 18:44
cclearner
Rank: 1
等 级:新手上路
帖 子:74
专家分:0
注 册:2007-6-28
收藏
得分:0 
我书上有,有空给你发上来

好人哪,一群好人哪!!!!!!
2007-07-05 19:58
a8451727
Rank: 1
等 级:新手上路
帖 子:238
专家分:5
注 册:2007-5-22
收藏
得分:0 
好的  先谢谢了。

2007-07-05 20:27
cclearner
Rank: 1
等 级:新手上路
帖 子:74
专家分:0
注 册:2007-6-28
收藏
得分:0 

int Fibonacci(int n);

int main()
{
int n, answer;
cout << "Enter number: ";
cin >> n;
cout << "\n\n";

answer = Fibonacci(n);
cout << answer << " is the " << n << "th Fibonacci number\n";
return 0;
}

int Fibonacci (int n)
{
cout << "Processing Fibonacci(" << n << ")... ";
if (n < 3 )
{
cout << "Return 1!\n";
return (1);
}
else
{
cout << "Call Fibonacci(" << n-2 << ") and Fibonacci(" << n-1 << ").\n";
return( Fibonacci(n-2) + Fibonacci(n-1));
}
}


好人哪,一群好人哪!!!!!!
2007-07-05 20:45
野比
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:1627
专家分:516
注 册:2007-5-24
收藏
得分:0 

递归体现在8086上就是不停的CALL-PUSH-RET-CALL-PUSH-RET...POP-POP...
最简单的形式是这样的..
函数(参数){
if(参数==结束条件){
返回结束值;
}
计算;
return 函数(参数);
}

------------
哦...cclearner越来越高手咯... 加油哦..


女侠,约吗?
2007-07-05 22:27
快速回复:[求助]初学递归。
数据加载中...
 
   



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

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