斐波那契数列又称黄金分割数列,是这样的: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);