==================================声明==================================

本文原创,转载请注明作者和出处,并保证文章的完整性(包括本声明)。

本文不定期修改完善,为保证内容正确,建议移步原文处阅读。

本文链接:http://www.cnblogs.com/wlsandwho/p/4205524.html

======================================================================

闲来不想做事,刷了个网页,看到乱七八糟的东西就不自觉的扩展下,这坏毛病改不了了,又浪费了好多刷贴吧的时间。

======================================================================

随手写了个小代码,感觉写起来很简单,但是对于退出条件是“1”还是“2”,是“<=”还是“<”,却是比较蛋疼的。

人老了就不愿意多动脑,自己推导就算了吧,我下面的代码靠编译调试确定了下,没有问题。

估计哪次让我现场在纸上写一个,就抓虾了。

======================================================================

要理论的话,请自行翻阅《数据结构与算法分析 c语言描述》和《算法导论》,我就贴个代码,请勿吐槽。

======================================================================

递归

 1 #include <Windows.h>
 2 #include <iostream>
 3 
 4 using namespace  std;
 5 
 6 LONG Fibonacci(LONG lN)
 7 {
 8     if (lN<2)
 9     {
10         return lN;
11     }
12 
13     return Fibonacci(lN-1)+Fibonacci(lN-2);
14 }
15 
16 int main()
17 {
18     LONG lS=Fibonacci(40);
19 
20     return 0;
21 }

尾递归

 1 #include <Windows.h>
 2 #include <iostream>
 3 
 4 using namespace  std;
 5 
 6 LONG Fibonacci(LONG lN,LONG lA=1,LONG lB=1)
 7 {
 8     if (lN==2||lN==1)
 9     {
10         return lB;
11     }
12 
13     return Fibonacci(lN-1,lB,lA+lB);
14 }
15 
16 int main()
17 {
18     LONG lS=Fibonacci(40);
19 
20     return 0;
21 }

递推

 1 #include <Windows.h>
 2 #include <iostream>
 3 
 4 using namespace  std;
 5 
 6 LONG Fibonacci(LONG lN)
 7 {
 8     LONG lS=1;
 9     LONG lA=1;
10     LONG lB=1;
11 
12     for (LONG lCount=3;lCount<=lN;lCount++)
13     {
14         lS=lA+lB;
15         lA=lB;
16         lB=lS;
17     }
18 
19     return lS;
20 }
21 
22 int main()
23 {
24     LONG lS=Fibonacci(40);
25 
26     return 0;
27 }