一、经典解法
Fibonacci数列的经典解法,即递归解法,如下
int fib(int n){
if(n <= 0) return 0;
if(n == 1) return 1;
return fib(n-1) + fib(n-2);
}
代码是十分简洁,但有一个问题,即重复求解子问题,复杂度以 n 的指数方式递增。
二、实用解法
改进的做法是避免掉重复计算,复杂度可优化到O(n),如下
int fib(int n){
if(n <= 0) return 0;
if(n == 1) return 1;
int a = 0, b = 1, sum = 0;
for(int i = 2; i <= n; ++i){
sum = a + b;
a = b;
b = sum;
}
return sum;
}
三、快速幂
该方法依赖于这样一个事实