斐波那契数列的递归算法如下:
int fibonacci(int n)
{
if (n < 2)
{
return n;
}
if (n == 2)
{
return 1;
}
if (n == 3)
{
/*---统计第三项被计算了多少次---*/
++count;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
/*
** 斐波那契数列的第40项
** 结果如下
** 102334155
** 第三项被计算了39088169次!
*/
从上述代码的打印结果可以看出,在求解斐波那契数列的第40项过程中斐波那契数列的第3项被计算了近4000万次,所以有必有对其进行优化.
优化后的递归算法:
int fibonacci(int n_1, int n_2, int n)
{
if (n < 3)
{
return 1;
}
if (n == 3)
{
/*---统计第三项被计算了多少次---*/
++count;
return n_1 + n_2;
}
return fibonacci(n_2, n_1 + n_2, n - 1);
}
/*
** 斐波那契数列的第40项
** 结果如下
** 102334155
** 第三项被计算了1次!
*/
下面是非递归算法:
int fibonacci(int n)
{
if (n < 2)
{
return n;
}
if (n == 2)
{
return 1;
}
int n_1 = 1;
int n_2 = 1;
int n_n = 0;
for (int i = 3; i <= n; ++i)
{
n_n = n_1 + n_2;
n_1 = n_2;
n_2 = n_n;
}
return n_n;
}