斐波那契数列又称黄金分割数列,是这样的:1、1、2、3、5、8、13……就是从第三项开始,每一项等于前两项之和。
我们想要求得第n个斐波那契数列是什么时,可以这样敲
一、第一种方法比较直接
#include <stdio.h>
int main()
{
int n,a,b,sum;
a=1;
b=1;
scanf("%d",&n);
if(n==1 || n==2)
{
printf("1/n");
}
else
{
for(int i=3;i<=n;i++)
{
sum=a+b;
a=b;
b=sum;
}
}
printf("第%d个斐波那契数列是%d\n",n,sum);
return 0;
}
整体是这样。
再从一部分开始分析
#include <stdio.h>
int main()
{
int n,a,b,sum;
a=1;
b=1;
scanf("%d",&n);
1、int n;与scanf("%d",&n);加上后续输入,指出要求的n
2、a、b、sum先定义方便后续使用
if(n==1 || n==2)
{
printf("1/n");
}
3、根据斐波那契数列性质,第一项和第二项没有规律可言,所以先判断n是否等于1或2
else
{
for(int i=3;i<=n;i++)
{
sum=a+b;
a=b;
b=sum;
}
}
4、对除了1和2的情况外进行分析运用for循环对每一项进行叠加计算出第n项
printf("第%d个斐波那契数列是%d\n",n,sum);
return 0;
5、最后表达,并加以文字美化结果
二、第二种方法使用递归
#include <stdio.h>
int fi(int n)
{
if(n==1 || n==2) return 1;
else return fi(n-2)+fi(n-1);
}
int main()
{
int n;
scanf("%d",&n);
printf("%d",fi(n));
return 0;
}
整体是这样的。
从一部分慢慢分析
int fi(int n)
{
if(n==1 || n==2) return 1;
else return fi(n-2)+fi(n-1);
}
1、这一段是最主要的算法区域,因为数列的性质先判断n是否为1和2,并提供返回值。
2、再对不是1和2的情况进行处理,这里引用f(n),根据斐波那契数列的性质,每一项等于前两项的和,也就是f(n)=f(n-1)+f(n-2),最后会退到f(1)和f(2),这两个数已经提前定义(也就是当n等于1和2的时候),直接进入计算。
int main()
{
int n;
scanf("%d",&n);
printf("%d",fi(n));
return 0;
}
3、最后就是定义n再加上后续输出,指定n。
4、如果想要美观也可以向方法一一样输入一个printf("第%d个斐波那契数列是%d\n",n,sum);