斐波那契数列是由数列前两项之和决定第三项,并以此类推,逐步迭代的二阶递推数列。
解决方案一:循环
输入位数n,输出前n项的数列
#include<stdio.h>int main(){int a,b,c,d=1,f1=1,f2=0;printf("请输入项数n:");scanf("%d",&a);for(;d<=a;d++){b=f1+f2;f1=f2;f2=b;printf("%d",b);}return 0;}
对循环体算法的理解:
开始的条件为f1 f2 b三个参数,其中f1 f2有值存储,b为空;故判断出结束循环体时也应为此形式,且同样为小 中 大的顺序,存储于大的值无价值。
退出循环时,f1应为f2,f2应为f1+f2根据需要回推算法,发现不能直接替换,否则会互相掣肘,没有一个式子在先进行的情况下不会影响到另外一个,故而调出了f3作为中间的缓存区,此时便解决了问题。
解决方法二:函数的迭代
求斐波那契数列的第n个数
#include<stdio.h>int fun(int x){if(x==1||x==2)return 1;else if(x==0)return 0;x=fun(x-1)+fun(x-2);return x;}int main(){int n;scanf("%d",&n);printf("%d",fun(n));return 0;}
补充:子函数中用switch亦可。