题目:写一个函数,输入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);
}