zoukankan      html  css  js  c++  java
  • 两个经典递归问题:菲波那契数列 + 汉诺塔

    一.递归问题的处理步骤

       1)抽象出递归公式:对实际问题进行部分穷举,抽象出递归关系(关键),并列出“递归表达式”

       2)确定递归出口找出递归调用终止点

     

    二.菲波那契数列

      实际问题:兔子繁殖问题

            兔子在出生一个月后为成兔,两个月后就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有

      兔都不死,那么一年以后可以繁殖多少对兔子?

        1)抽象出递归公式

             初始为:1对幼兔

             第n个月    1      2       3       4      5      6      7   

             幼兔:      1      0       1       1      2      3      5

             成年兔:   0      1       1       2      3      5      8

             总计:      1      1       2       3      5      8     13

             规律:

             幼兔=前一个月成年兔

             成年兔=前一个月成年兔+前一个月幼兔

             总计=幼兔+成年兔=前一个月成年兔+(前一个月成年兔+前一个月幼兔)

                                       =前一个月成年兔+前一个月总计

                                       =(再前一个月成年兔+再前一个月幼兔)+前一个月总计

                                       =再前一个月总计+前一个月总计

             递归表达式如下

                   A(1)=A(2)=1,

                   A(N)=A(N-1)+A(N-2)(N>=3)

        2)找出递归调用终止点

                   由递归表达式很明显观察出,递归终止点为3;故剩下的A(1),A(2)直接穷举出来即可

                    一年后,相当于“第13个月”。

        代码如下:

     1 #include<iostream>
     2 using namespace std;
     3 
     4 int Fibonacci(int X)
     5 {
     6     if(X==1||X==2)
     7     {
     8         return 1;
     9     }
    10     else
    11     {
    12         return(Fibonacci(X-1)+Fibonacci(X-2));
    13     }
    14 }
    15 
    16 int main()
    17 {
    18     int tempInt;
    19     int returnInt;
    20 
    21     tempInt=13;
    22     returnInt=Fibonacci(tempInt);
    23 
    24     cout<<returnInt<<endl<<endl;
    25     system("pause");
    26     return 0;
    27 
    28 }

          运行结果:

         

     

    三.汉诺塔

        http://blog.163.com/liuknan@yeah/blog/static/16983829020109892141485/

  • 相关阅读:
    BZOJ2303:[APIO2011]方格染色(并查集)
    BZOJ1116:[POI2008]CLO(并查集)
    BZOJ4011:[HNOI2015]落忆枫音(DP,拓扑排序)
    洛谷1387 最大正方形
    洛谷 P1858 多人背包
    vijos 1085 Sunnypig闯三角关
    vijos 1030 重叠的方框
    codevs 1001 舒适的路线 WK
    1266. [NOIP2012] 借教室
    codevs 2370 小机房的树
  • 原文地址:https://www.cnblogs.com/edisonfeng/p/2492055.html
Copyright © 2011-2022 走看看