求个斐波那契数列求和的非递归算法的解释

zixiawzm 2010-12-02 08:50:26
//斐波那契数列求和的非递归算法
//非递归算法利用栈作工具,栈的数据类型
struct Node {
int n,tag;
};
//利用栈作工具,非递归算法
long Fibnacci ( long N )
{
Stack<Node> S; Node w; long sum = 0;
do {
while ( N > 1 ) {
w.n = N; w.tag = 1; S.Push (w);
N--;
}
//向左递归到底, 边走边进栈
sum = sum + N;
while ( !S.IsEmpty( ) ) {
S.Pop(w);
if ( w.tag == 1 ) { //改为向右递归
w.tag = 2; S.Push (w);
N = w.n - 2;
break;
}
}
} while ( !S.IsEmpty( ) );
return sum;
}
...全文
583 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mLee79 2010-12-02
  • 打赏
  • 举报
回复
SUM( Fib(N) ) = Fib(N+2) - 1

Fib(N) 有通项公式, 也可以由矩阵 { { 1 1 } { 1 0 } } ^ N 得到, 有这么麻烦么...

yby4769250 2010-12-02
  • 打赏
  • 举报
回复
前辈曰:写一个小范围的数据测试,逐步调试跟踪,是理解递归的不二法门
longar 2010-12-02
  • 打赏
  • 举报
回复
弱弱的问一句,既然不用递归了,为什么又要引入堆栈呢?这两种方法花费的时间还不是一样吗?
就想叫yoko 2010-12-02
  • 打赏
  • 举报
回复
主要就是看懂这个终止递归的地方,
無_1024 2010-12-02
  • 打赏
  • 举报
回复
就是一个简单的自顶向下的算法
無_1024 2010-12-02
  • 打赏
  • 举报
回复
一步一步的走一遍就看明白了啊
先开始吧N入栈标记为1
然后sum = sum + N-1;
在吧N出栈 判断标记 改动标记 在入栈 在对N修改 这是N就为 N-2了

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧