1. 程式人生 > >用遞迴和非遞迴實現斐波那契數列

用遞迴和非遞迴實現斐波那契數列

斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以遞推的方法定義:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)在現代物理、準晶體結構、化學等領域,斐波納契數列都有直接的應用

#include <stdio.h>

int Fib(int n) //遞迴
{
	if(n<0)
		printf("n<0,data error\n");
	else if(n==1 || n==2)
		return 1;
	else {
		return Fib(n-1) + Fib(n-2);
	}
	return 0;
}

int Fibonaci_f(int n) //非遞迴
{
	int i=0,result=0;
	int a=1,b=1;
	if(n<0)
		printf("n<0,data error\n");
	else if(n<=2)
		return 1;
	else {
		for(i=3;i<=n;i++) {
			result = a + b;
			a=b;
			b=result;
		}
	}
	return result;
}


int main()
{
	int n,ret=0,ret2=0;
	printf("請輸入下標:\n");
	scanf("%d",&n);
	ret = Fib(n);
	ret2=Fibonaci_f(n);
	printf("遞迴:the %d fib is %d\n",n,ret);
	printf("非遞迴:the %d fib is %d\n",n,ret2);
	return 0;
}