用递归和非递归的方法输出斐波那契数列的第n个元素(C语言实现)
费波那契数列(意大利语: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 else 31 { 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 else 53 { 54 return fib2(n-1) + fib2(n-2) ; //递归 55 } 56 }