用递归和非递归方法求解斐波那契数列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用递归和非递归方法求解斐波那契数列相关的知识,希望对你有一定的参考价值。

参考技术A #include<stdio.h>
void main()

int i,n;
int f[]= 1,1;
printf("请输入n的值:");
scanf("%d",&n);
for(i=2; i<=n; i++)
f[i] = f[i-2] + f[i-1];
for(i=0; i<=n; i++)

if(i%5==0) printf("\n");
printf("%12d",f[i]);


printf("\n");

//以上是非递归算法;注意输入的N的大小,防止 运算结果溢出..

//下边是递归算法求解:
#include<stdio.h>
void main()

int Fibonacci(int n);
int n,i,c=0;

printf("请输入n的值:");
scanf("%d",&n);
for(i=1; i<=n; i++)

c = Fibonacci(i);
printf("%12ld",c);
if(i%4==0) //用于换行 4个一行;
printf("\n");



int Fibonacci(int n)//函数部分;

long int f;

if(n==1 || n==2)

f=1;

else
if(n>=3)
f = Fibonacci(n-1) + Fibonacci(n-2);
return f;


//觉得不错就采纳吧,有什么疑问可以接着问哦,以上程序都是运行过,没问题哦!

递归和非递归方法实现斐波那契

     斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci[1]  )以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。

斐波那契递归算法实现。

//递归实现斐波那契
long long Fibonacci(int n)
{
	//if (n == 0 || n == 1)
	//	return n;
	//else
	//	return Fibonacci(n - 1) + Fibonacci(n - 2);
	return n < 2 ? n : Fibonacci(n - 1) + Fibonacci(n - 2);
}

由于斐波那契递归算法时间复杂度:O(2^N)空间复杂度为:O(N),下面通过非递归实现斐波那契。

//非递归实现斐波那契-------时间复杂度O(n),空间复杂度O(n)
long long Fibonacci(int n)
{
	long long *fibonacci = new long long[n + 1];//注意此处开辟n+1个空间
	fibonacci[0] = 0;
	fibonacci[1] = 1;
	for (int i = 2; i <= n; i++)
	{
		fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2];
	}
	long long ret = fibonacci[n];
	delete[] fibonacci;
	return ret;
}
//非递归实现斐波那契--迭代法-------时间复杂度O(n),空间复杂度O(1)
long long Fibonacci(int n)
{
	long long fibonacci[3] = { 0, 1, n };
	fibonacci[0] = 0;
	fibonacci[1] = 1;
	for (int i = 2; i <= n; i++)
	{
		fibonacci[2] = fibonacci[1] + fibonacci[0];
		fibonacci[0] = fibonacci[1];
		fibonacci[1] = fibonacci[2];
	}
	return fibonacci[2];
}
//非递归实现斐波那契--迭代法-------空间复杂度O(n),时间复杂度O(1)
long long Fibonacci(int n)
{
	long long result;
	long long pre_result;
	long long next_pre_result;
	next_pre_result = 0;
	pre_result = 1;
	result = 0;
	while (n > 0)
	{
		next_pre_result = pre_result;
		pre_result = result;
		result = next_pre_result + pre_result;
		n--;
	}
	return result;
}

本文出自 “Materfer” 博客,请务必保留此出处http://10741357.blog.51cto.com/10731357/1758144

以上是关于用递归和非递归方法求解斐波那契数列的主要内容,如果未能解决你的问题,请参考以下文章

用递归和非递归的方法输出斐波那契数列的第n个元素(C语言实现)

递归和非递归方法实现斐波那契

用递归函数求斐波那契数列的第n项的值

递归求斐波那契数列

如何用递归解决斐波那契数列

编写一个程序,利用递归函数求斐波那契数列(0,1,1,2,3,5,8,13,21…… )前100项的和