NO.1
迭代法
标签:通俗、易懂
思路:先打印第一项、再在循环里面执行fib=fib1+fib2,把fib2赋给fib1,把fib赋给fib2,每行5个可使用if函数(循环次数对5取余)。
1 #include <stdio.h> 2 main() 3 { 4 long fib1=0,fib2=1,fib=1; 5 int i; 6 printf("%ld\t",fib); 7 for(i=2;i<=20;i++) 8 { 9 fib=fib1+fib2; 10 printf("%ld\t",fib); 11 fib1=fib2; 12 fib2=fib; 13 if(i%5==0) 14 printf("\n"); 15 } 16 getch(); 17 }
NO.2
加减法
标签:代码少,不易理解
思路:
i | n | fib |
1 | 1 | 1 |
2 | 3 | 1 |
3 | 5 | 3 |
4 | 8 | 5 |
每次得出下一个数,再通过赋值赋给fib
1 #include<stdio.h> 2 main() 3 { 4 int fib=0,n=1,i; 5 for(i=1;i<=20;i++) 6 { 7 n+=fib; 8 fib=n-fib; 9 printf("%d\t",fib); 10 if(i%5==0) 11 printf("\n"); 12 } 13 getch(); 14 }
NO.3
数组法
标签:代码少,最易理解
思路:先打印前两项,后一项等于前两项之和。
1 #include<stdio.h> 2 main() 3 { 4 long fib[21]; 5 int i; 6 fib[1]=1; 7 fib[2]=1; 8 printf("%5ld\t%5ld\t",fib[1],fib[2]); 9 for(i=3;i<=20;i++) 10 {fib[i]=fib[i-1]+fib[i-2]; 11 printf("%5ld\t",fib[i]); 12 if(i%5==0) 13 printf("\n"); 14 } 15 getch(); 16 }
拓展,动态数组法
NO.1动态数组设置方法
1 #include <stdio.h> 2 #include <stdlib.h> 3 main() 4 { 5 int num,*p=0,i; 6 printf("输入数组元素个数:"); 7 scanf("%d",&num); 8 p=(int*)malloc(sizeof(int)*num); 9 for(i=0;i<num;i++) 10 { 11 scanf("%d",&p[i]); 12 } 13 for(i=0;i<num;i++) 14 { 15 printf("%d\n",p[i]); 16 } 17 }
NO.2
动态数组法的Fibonacci数列
1 #include <stdio.h> 2 #include <stdlib.h> 3 main() 4 { 5 int num,*fib=0,i; 6 printf("输入要显示元素个数:"); 7 scanf("%d",&num); 8 fib=(int*)malloc(sizeof(int)*num); 9 fib[1]=1; 10 fib[2]=1; 11 printf("%8ld\t%8ld\t",fib[1],fib[2]); 12 for(i=3;i<=num;i++) 13 {fib[i]=fib[i-1]+fib[i-2]; 14 printf("%8ld\t",fib[i]); 15 if(i%5==0) 16 printf("\n"); 17 } 18 getch(); 19 }
相关截图