参考书籍: 《数据结构(C++语言版)》作者:邓俊辉
内容: 计算斐波那契数 知识点: 递归
计算第n个斐波那契数
这是学习递归最经典的一个问题,最直接的解法如下。
c++int fib(int n){
/*
最经典的递归算法,由斐波那契数列的递推式得到
*/
if(n==1 || n==2){return 1;}
return fib(n-1) + fib(n-2);
}
但是以上算法有很多冗余无用的计算,导致复杂度来到了 ,以下采取记忆的方法,得到复杂度为 的算法。
c++int fib1(int n, int& prev){
/*
采用记忆的方法,存储会用到的数据,使时间复杂度变为O(n)
*/
if(n==1){
prev = 0;
return 1;
}
int prevPrev;
prev = fib1(n-1, prevPrev);
return prev + prevPrev;
}
其实还存在 的算法,感兴趣可自行了解。
本文作者:yan7
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!