劍指offer面試題:兩種方法解決斐波那契數列

題目:寫一個函數,輸入n,求斐波那契數列的第n項。(1,1,2,3,5,8)

思路:斐波那契數列作爲數學歷史上很經典的存在,讓我們用代碼快速解出他的第n項。

 

我們的第一種方法是遞歸,這種方法解斐波那契數列優點就是很容易理解,但是缺點就是數字稍微大一點它花費的時間就特別的長,因爲遞歸中重複計算的部分太多了,數字小可能差別不大,但數字大就體現出來了

#include<stdio.h>
int fib(int m)
{
	if(m==0)
	{
		return 0 ;
	}
	if(m==1||m==2)
	{
		return 1;
	}
	else
	{
		return fib(m-1)+fib(m-2);
	}
}
int main()
{
	int m;
	scanf("%d",&m);
	int n=fib(m);
	printf("%d\n",n);
}

    第二種方法就是我們所熟悉的循環了,用循環解斐波那契數列比遞歸要來的容易點,消耗也不大。極大程度避免了遞歸了重複計算,

#include<stdio.h>
int fib(int n)
{
	if(n<=0)
	{
		return 0;
	}
	if(n==1||n==2)
	{
		return 1;
	}
	int a=1;
	int b=1;
	int c;
	for(int i=2;i<n;i++)
	{
		c=a+b;
		a=b;
		b=c;
	}
	return c;
}
int main()
{
	int m;
	scanf("%d",&m);
	int n=fib(m);
	printf("%d\n",n);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章