斐波那契数列的实现(四种方法 递归,非递归)

别来无恙 提交于 2019-12-01 20:53:00

要实现斐波那契数列,首先先要了解什么是斐波那契数列

0 ,1,1,2,3,5,8,13...这样的数列称为斐波那契数列

一  非递归

int Fib(int n)
{
	if (n == 1)
	{
		return 0;
	}
	if (n == 2)
	{
		return 1;
	}
	int f1 = 0;
	int f2 = 1;
	int c = 0;
	for (int i = 3; i <= n; i++)
	{
		c = f1 + f2;
		f1 = f2;
		f2 = c;
	}

	return c;
}                   
int main()
{
	int n;
	scanf("%d", &n);
	int ret=Fib(n);
	printf("%d", ret);
	system("pause");
	return 0;
}

二  非递归

int Fib(int n)
{
	int f1 = 0;
	int f2 = 1;
	if (n >= 1)
	{
		return n - 1;
	}
	for (int i = 1; i <= n / 2; i++)
	{
		f1 = f1 + f2;
		f2 = f1 + f2;
	}
	if (n / 2 != 0)
	{
		return f1;
	}
	else
	{
		return f2;
	}
}
三   递归

int Fib(int n)//递归
{
	if (n == 1)
	{
		return 0;
	}
	if (n == 2)
	{
		return 1;
	}
	return Fib(n - 1) + Fib(n - 2);
}

四   递归的改进版

int Fib(int first, int second, int n)
{
	if (n <= 2)
	{
		return n - 1;
	}
	else if (n == 3)
	{
		return first + second;
	}
	else
	{
		return Fib(second, first + second, n - 1);
	}

}
int main()
{
	int n;
	scanf("%d", &n);
	int ret=Fib(0,1,n);
	printf("%d", ret);
	system("pause");
	return 0;


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!