c++
class Solution {
public:
int Fibonacci(int n) {
int a = 0, b = 1;
while (n -- ) {
int c = a + b;
a = b, b = c;
}
return a;
}
};
eclass Solution {
public:
int Fibonacci(int n) {
if(n==0) return 0;
if(n==1) return 1;
if(n==2) return 1;
if(n==3) return 2;
if(n==4) return 3;
if(n==5) return 5;
if(n==6) return 8;
if(n==7) return 13;
if(n==8) return 21;
if(n==9) return 34;
if(n==10) return 55;
if(n==11) return 89;
if(n==12) return 144;
if(n==13) return 233;
if(n==14) return 377;
if(n==15) return 610;
if(n==16) return 987;
if(n==17) return 1597;
if(n==18) return 2584;
if(n==19) return 4184;
if(n==20) return 6765;
if(n==21) return 10946;
if(n==22) return 17711;
if(n==23) return 28657;
if(n==24) return 46368;
if(n==25) return 75025;
if(n==26) return 121393;
if(n==27) return 196418;
if(n==28) return 317811;
if(n==29) return 514229;
if(n==30) return 832040;
if(n==31) return 1346269;
if(n==32) return 2178309;
if(n==33) return 3524578;
if(n==34) return 5702887;
if(n==35) return 9227456;
if(n==36) return 14930352;
if(n==37) return 24157817;
if(n==38) return 39088169;
if(n==39) return 63245986;
}
};
时间复杂度:O(1)!!!
递推法
class Solution {
public:
int Fibonacci(int n) {
if(n == 0) return 0;
if(n <= 2) return 1;
int a = 1, b = 1, c = 0;//a保存f(n-2),b保存f(n-1),c保存f(n)
for(int i = 3; i <= n; ++i)//递推求出f(i)
{
c = (a + b) ;//f(n) = f(n - 1) + f(n - 2)
a = b;//a保存b
b = c;//b保存c
}
return c;
}
};
(通项公式)
class Solution {
public:
int Fibonacci(int n) {
double t = sqrt (5) ;
long long r = (pow ((1 + t) / 2 , n) - pow ((1 - t) / 2 , n)) / t ;
return r ;
}
};