1. 程式人生 > >Linux環境C語言斐波拉切數列(1,1,2,3,5,8,13,.........)實現

Linux環境C語言斐波拉切數列(1,1,2,3,5,8,13,.........)實現

fib %d lse printf 黃金 oda n-2 desktop tdi

斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以遞推的方法定義:F(1)=1,F(2)=1, F(3)=2,F(n)=F(n-1)+F(n-2)(n>=4,n∈N*).

  C語言可以用以下方法實現

一 遞歸實現

 1 #include <stdio.h>
 2 
 3 int fun(int i) //遞歸函數
 4 {
 5
int res = 0; 6 if(i>2) //從第三位開始 7 { 8 res = fun(i-1) + fun(i-2); 9 } 10 else //第一和第二 11 { 12 res = 1; 13 } 14 15 return res; 16 } 17 18 void main() 19 { 20 int n = 20; 21 for(int i=1;i<=n;i++) // 為了打印,循環調用 22 { 23 int res = fun(i);//
i表示第幾位 24 printf("%d\t",res); 25 } 26 printf("\n"); 27 }

運行結果

he@he-PC:~/Desktop$ ./a.out 
1    1    2    3    5    8    13    21    34    55    89    144    233    377    610    987    1597    2584    4181    6765    
he@he-PC:~/Desktop$ ^C

二 循環實現

 1 void main()
 2 {
 3     int a[20
] = {0},i=0; 4 5 a[0] = 1; 6 a[1] = 1; 7 for( i=0;i<= sizeof(a)/sizeof(int);i++) 8 { 9 if(i<2) 10 { 11 a[i] =1; 12 } 13 else 14 { 15 a[i] = a[i-1] + a[i-2]; 16 17 } 18 printf("%d\t",a[i]); 19 } 20 21 printf("\n"); 22 23 }

運行結果

he@he-PC:~/Desktop$ ./a.out 
1    1    2    3    5    8    13    21    34    55    89    144    233    377    610    987    1597    2584    4181    6765    10946    
he@he-PC:~/Desktop$ 

三 循環實現

 1 #include <stdio.h>
 2 
 3 
 4 void main()
 5 {
 6     int i = 0;
 7     int tmp = 1, tmp2 = 0, sum = 0;
 8     for(i=0;i<=20;i++)
 9     {
10         sum = tmp + tmp2;
11         tmp = tmp2;
12         tmp2 = sum;
13         printf("%d\t",sum);        
14     }
15     printf("\n");
16 }

運行結果

he@he-PC:~/Desktop$ ./a.out 
1    1    2    3    5    8    13    21    34    55    89    144    233    377    610    987    1597    2584    4181    6765    10946    
he@he-PC:~/Desktop$ 

四 循環實現

 1 #include <stdio.h>
 2 
 3 void main()
 4 {
 5     int a = 0, n = 20 ,b = 1;
 6     
 7     for(int i=2;i<=n;i++)
 8     {
 9         b = a + b;
10         a = b-a;
11         printf("%d\t",b);        
12     }
13     printf("\n");
14 }

運行結果

he@he-PC:~/Desktop$ ./a.out 
1    2    3    5    8    13    21    34    55    89    144    233    377    610    987    1597    2584    4181    6765    
he@he-PC:~/Desktop$ 

Linux環境C語言斐波拉切數列(1,1,2,3,5,8,13,.........)實現