所谓的斐波纳契数列是指:
- 前2个数是 0 和 1 。
- 第 i 个数是第 i-1 个数和第i-2 个数的和。
斐波纳契数列的前10个数字是:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ...
给定 1
,返回 0
给定 2
,返回 1
给定 10
,返回 34
题目就是斐波那契数算法的变形。关于斐波那契数,首先想到递归
class Solution{
public:
/**
* @param n: an integer
* @return an integer f(n)
*/
int fibonacci(int n) {
// write your code here
if ( n == 1 ) {
return 0;
} else if ( n == 2 || n == 3 ) {
return 1;
}
/*else {
return fibonacci(n-1) + fibonacci(n-2);
}
};
但是递归太耗费时间,结果超时。
再换成非递归形式
<pre name="code" class="cpp">class Solution{
public:
/**
* @param n: an integer
* @return an integer f(n)
*/
int fibonacci(int n) {
// write your code here
if ( n == 1 ) {
return 0;
} else if ( n == 2 || n == 3 ) {
return 1;
}
int s1 = 1;
int s2 = 1;
int i = 4;
int sum = 0;
while (i <= n) {
sum = s1 + s2;
s1 = s2;
s2 = sum;
i++;
}
return sum;
}
};