【题目】
给定整数N,返回斐波那契数列的第N项。
补充问题1:给定整数N,代表台阶数,一次可以跨2个或者1个台阶,返回有多少种走法。
【要求】
实现时间复杂度为O(2^n),O(N),O(logN)的解法。
【解答】
O(2^n):斐波那契数列为1,1,2,3,5,8,…,即可的递推公式F(N)=F(N-1)+F(N-2)
punlic int f1(int n){
if(n<1){
return 0;
}
if (n==1 || n==2){
return 1;
}
return f1(n-1)+f1(n-2);
}
O(N):斐波那契数列可以从左到右依次求出每一项的值,所以可以顺序计算到第N项位置
punlic int f2(int n){
if(n<1){
return 0;
}
if (n==1 || n==2){
return 1;
}
int res = 1;
int pre = 1;
int tmp = 0;
for(int i = 3;i<=n;i++){
tmp = res;
res = res+pre;
pre = tmp;
}
return res;
}
O(logN):太难了以后通了再补充。