zoukankan      html  css  js  c++  java
  • 斐波拉切数列

    问题陈述:

           Fibonacci为1200年代的欧洲数学家,在他的著作中曾经提到:若有一只兔子每个月生一只小兔子,一个月后小兔子也开始生产。起始只有一只兔子,一个月后就有两只兔子,二个月后有三只兔子,三个月后有五只兔子(小兔投入生产)......。这就是Fibonacci数列,一般习惯称之为费氏数列,例如如下: 1 1 2 3 5 8 13 21 34 55 89.....

    问题解法:

           根据问题陈述,我们可以将费氏数列定义为一下:

           F(n) = F(n-1) + F(n-2)        if n > 1

           F(n) = 1                             if n = 0, 1

           Fibonacci有两种最常见的解法,即迭代法和递归法。

    代码详解:

     1 /*
     2 注:fibanacci数列下标从0开始
     3 fibRecurse(int n) 递归计算数列下标为n的值
     4 fibIterate(int n) 迭代计算数列下标为n的值
     5 */
     6 #include <stdio.h>
     7 #include <stdlib.h>
     8 
     9 int fibRecurse(int n);
    10 int fibIterate(int n);
    11 
    12 int main()
    13 {
    14     int i, n;
    15     printf("Please input a number : ");
    16     scanf("%d", &n);
    17     printf("Recursion:
    ");
    18     for(i=0; i<n; i++) {
    19         printf("%-5d",fibRecurse(i));
    20         if((i+1)%10 == 0) {
    21             printf("
    ");
    22         }
    23     }
    24     printf("
    ");
    25     printf("Iteration:
    ");
    26     for(i=0; i<n; i++) {
    27         printf("%-5d",fibIterate(i));
    28         if((i+1)%10 == 0) {
    29             printf("
    ");
    30         }
    31     }
    32     return 0;
    33 }
    34 
    35 int fibRecurse(int n) {
    36     if(n < 0) {
    37         return -1;
    38     }
    39     if(n==0 || n==1) {
    40         return 1;
    41     }else {
    42         return fibRecurse(n-1) + fibRecurse(n-2);
    43     }
    44 }
    45 
    46 int fibIterate(int n) {
    47     int a = 1, b = 1, i, s;
    48     if(n < 0) {
    49         return -1;
    50     }
    51     if(n==0 || n==1) {
    52         return 1;
    53     }else {
    54         for(i=1; i<n; i++) {
    55             s = a+b;
    56             a = b;
    57             b = s;
    58         }
    59     }
    60     return s;
    61 }

    转载请注明出处:http://www.cnblogs.com/michaelwong/p/4114942.html

  • 相关阅读:
    两个单向链表的第一个公共节点
    c字符输出
    堆排序
    归并排序
    LR中,URL -based script与HTML -based script区别
    loadrunner文本检查点
    Loadrunner集合点Rendezvous知识
    连接池(Connection Pool)技术
    lucene 查询 (转载)
    Lucene + Hadoop 分布式搜索运行框架 Nut 1.0a9转自http://www.linuxidc.com/Linux/2012-02/53113.htm
  • 原文地址:https://www.cnblogs.com/michaelwong/p/4114942.html
Copyright © 2011-2022 走看看