標籤:can 非遞迴 mat dir lease scanf api 下標 wiki
費波那契數列(意大利語:Successione di Fibonacci),又譯為費波拿契數、斐波那契數列、費氏數列、黃金分割數列。
在數學上,費波那契數列是以遞迴的方法來定義:
- {\displaystyle F_{0}=0}
- {\displaystyle F_{1}=1}
- {\displaystyle F_{n}=F_{n-1}+F_{n-2}}(n≧2)
用文字來說,就是費波那契數列由0和1開始,之後的費波那契係數就是由之前的兩數相加而得出。首幾個費波那契係數是:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233……(OEIS中的數列A000045)
特別指出:0不是第一項,而是第零項。
1 #include <stdio.h> 2 3 int fib1 (int n) ; //非遞迴產生下標為n的斐波那契數列元素 4 int fib2 (int n) ; //遞迴產生下標為n的斐波那契數列元素 5 6 int main () 7 { 8 int n ; 9 printf ("please input the index of fib:") ;10 scanf ("%d" , &n) ;11 printf ("the %d fib1 number is %d \n" , n , fib1(n)) ;12 printf ("the %d fib2 number is %d \n" , n , fib2(n)) ;13 return 0 ;14 }15 16 int fib1 (int n)17 {18 int i = 0 ;19 int a = 1 ;20 int b = 1 ;21 int result = 0 ;22 if (n <= 0)23 {24 return 0 ;25 }26 else if (n <= 2)27 {28 return 1 ;29 }30 else31 {32 for (i = 3 ; i <= n ; i ++)33 {34 result = a + b ;35 a = b ;36 b = result ;37 }38 return result ;39 }40 }41 42 int fib2 (int n)43 {44 if (n <= 0)45 {46 return 0 ;47 }48 else if (n <= 2)49 {50 return 1 ; //遞迴終止條件51 }52 else53 {54 return fib2(n-1) + fib2(n-2) ; //遞迴55 }56 }
用遞迴和非遞迴的方法輸出斐波那契數列的第n個元素(C語言實現)