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 }

 

 

相关截图