题目:
f(n) = 0 n=0
1 n=1
f(n-1) + f(n-2) n > 1
思路一: 递归(效率低)
代码:
int Fibnaci(int n)
{
if (0 == n)
return 0;
else if (1 == n)
return 1;
else if (n > 1)
return Fibnaci(n-1) + Fibnaci(n-2);
}
思路二: 循环 O(n)
i为次数 plusOne plusTwo ret
1 f(0) f(1) f(2)
2 f(1) f(2) f(3)
.......
n-1 f(n-2) f(n-1) f(n)
代码:
int Fibnaci(int n)
{
if (0 == n)
return 0;
if (1 == n)
return 1;
int plusOne = 0;
int plusTwo = 1;
int ret = 0;
for (int i = 1; i < n; ++i)
{
ret = plusOne + plusTwo;
plusOne = plusTwo;
plusTwo = ret;
}
return ret;
}