斐波那契数列的求法有很多种,这里只列举一种最简单的方法。我们先假设斐波那契数列是如下排列的:
下标 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | …… |
数据 | 1 | 0 | 1 | 1 | 2 | 3 | 5 | …… |
我们先设置两个变量f和g,并分别初始化为0和1以代表第0号元素和第-1号元素(实际上-1号元素并不存在,只是为了更好地。然后我们可以很容易地发现,只要不断重复进行如下操作
f = f + g;
g = f - g;
就能令f和g不断以一个单位的速度在数列中进行右移,从而在n次迭代后得到对应的元素。
具体代码如下:
class Solution {
public:
int Fibonacci(int n) {
int f = 0, g = 1;
while(n--){
f += g;
g = f - g;
}
return f;
}
};
另外值得一提的是,该算法的DP算法分析思路与以上思路一致,只不过以上代码没有用到dp数组而已。