用递归和非递归的方法输出斐波那契数列的第n个元素(C语言实现)

费波那契数列意大利语:Successione di Fibonacci),又译为费波拿契数斐波那契数列费氏数列黄金分割数列

数学上,费波那契数列是以递归的方法来定义:

  • {\displaystyle F_{0}=0}F_{0}=0
  • {\displaystyle F_{1}=1}F_{1}=1
  • {\displaystyle F_{n}=F_{n-1}+F_{n-2}}F_{n}=F_{{n-1}}+F_{{n-2}}(n≧2)

用文字来说,就是费波那契数列由0和1开始,之后的费波那契系数就是由之前的两数相加而得出。首几个费波那契系数是:

01123581321345589144233……(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 }

 

posted @ 2017-03-27 23:29  maoguy  阅读(11684)  评论(0编辑  收藏  举报