C_斐波那契数列递归算法的优化

斐波那契数列的递归算法如下:

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;
}

猜你喜欢

转载自blog.csdn.net/sss_0916/article/details/84503577
今日推荐