计算裴波拉契数列
- 由于递归计算产生大量重复的值 效率低
- 使用循环避免重复计算
public int Fibonacci(int n) {
if(n < 2)
return n;
int fibOne = 0;
int fibTwo = 1;
int fib = 0;
for(int i = 2; i <= n;i++) {
fib = fibOne + fibTwo;
fibOne = fibTwo;
fibTwo = fib;
}
return fib;
}
2.也可用矩阵计算使用递归时间复杂度为logN
public class Solution {
private static int[][] matrix = {
{1,1},{1,0}};
public int Fibonacci(int n) {
if(n < 2)
return n;
int[][] temp = pow(n-1); //二阶矩阵的n-1次方
return temp[0][0];
}
public int[][] pow(int n){
if(n==1){//递归结束条件
return matrix;
}
int[][] temp;
if(n%2 != 0){
temp = pow((n-1)/2);
temp = matrix(temp,temp);
return matrix(temp,matrix);