==================================声明==================================
本文原创,转载请注明作者和出处,并保证文章的完整性(包括本声明)。
本文不定期修改完善,为保证内容正确,建议移步原文处阅读。
本文链接: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 }