首先最直观的实现方式莫过于使用循环来实现
如下
int Fibonacci(int n)
{
int a = 1;
int b = 1;
int c;
if (n == 1 || n == 2)
return a;
if (n < 1)
return -1;
for (int i = 2; i < n; i++)
{
c = a + b;
a = b;
b = c;
}
return c;
}
其次是递归的方式
int Fibonacci(int n)
{
if (n <= 2)
return 1;
else
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
我们会发现递归的方式效率非常低,原因就是这种递归会造成大量的冗余计算,一旦达到40以上就会非常的慢。
那么对这个递归的方式进行优化,如下:
int Fibonacci(int n, int a0, int a1)
{
if (n == 0)
return a0;
if (n == 1)
return a1;
return Fibonacci(--n, a1, a0+a1);
}
这种改进的递归通过两个变量a0和a1来保存每次的两位运算结果,消除了数据冗余,极大地提高了运算的效率。