題目:寫一個函數,輸入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);
}