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/

  • 相关阅读:
    (Toolbar)Android中如何消除Toolbar左边的空白
    (TextView)Android中为TextView赋初始值
    (Edittext)Android中界面中有多个Edittext,如何默认让第二个获取焦点
    (警告)Android中报Custom view `&#215;&#215;&#215;` has setOnTouchListener called on it but does not override performClick警告
    (Toolbar)Android中app:showASAction的值及含义
    个人课程总结
    (list)关于list清空问题的解决
    Ubuntu hive 安装过程中遇到的一些问题
    学习进度——第十七周
    个人课程总结
  • 原文地址:https://www.cnblogs.com/edisonfeng/p/2492055.html
Copyright © 2011-2022 走看看