真没啥好说的QAQ。但是前阵子公司的技术BOSS和咱纠结这个数列的一些问题,于是我只好记录一下一些东西,表示自己还是学到了一点东西滴~
话说真查便发现这玩意鼎鼎大名无处不在,反正我高数不好大部分看不懂,就觉得不明觉厉……
所谓斐波那契数列就是指1 1 2 3 5 8 ....这一数列。数列的格式是F(1)=1 ,F(2)=1,F(n)=F(n-1)+F(n-2)(n>=3)。 斐波那契数列原型是个非常典型的递归算法,根据上述定义可以很简单的写出求该数列第n位的递归算法为:
int fib(int n){
if(n>=2){
return 1;
}
return fib(n-1)+fib(n-2);
}
这个丑陋的函数十分鲜明滴证明了一个道理,那就是递归算法严重影响计算性能=-=。我自己实际运行了一下,电脑在计算到第43位数字时开始耗费大量的时间:
计算位数32结果2178309计算次数4356617套O(n)2178309计算位数33结果3524578计算次数7049155套O(n)3524578
计算位数34结果5702887计算次数11405773套O(n)5702887
计算位数35结果9227465计算次数18454929套O(n)9227465
计算位数36结果14930352计算次数29860703套O(n)14930352
计算位数37结果24157817计算次数48315633套O(n)24157817
计算位数38结果39088169计算次数78176337套O(n)39088169
计算位数39结果