• Java基础知识强化之IO流笔记13:递归之不死神兔问题(斐波那契数列)


    1.这个问题是如下的:

       有一对兔子,从出生后第3个月起,每个月都生一对兔子,小兔子长到第3个月又生一对兔子,加入兔子都不死,问第20个月兔子的对数?

    分析:我们找规律

          兔子对数
    第1个月:    1
    第2个月:    1
    第3个月:    2
    第4个月:    3
    第5个月:      5
    第6个月:    8
    ……
    由此可见兔子的对象数据是:
     1,1,2,3,5,8,……
    • n=1或者n=2,result=1;

    • n>=3,result=fun(n-1)+fun(n-2);

    2. 代码实现:

     1 package com.himi.diguidemo;
     2 
     3 
     4 /**
     5  * 
     6  *有一对兔子,从出生后第3个月起,每个月都生一对兔子,小兔子长到第3个月又生一对兔子,加入兔子都不死,问第20个月兔子的 对数?
     7  *分析:我们找规律
     8  *         兔子对数
     9  *第1个月:            1
    10  *第2个月:            1
    11  *第3个月:            2
    12  *第4个月:            3
    13  *第5个月:            5
    14  *第6个月:            8
    15  *……
    16  *由此可见兔子的对象数据是:
    17  *   1,1,2,3,5,8,……
    18  *   
    19  * 如何实现这个程序呢?
    20  *         A:数组实现
    21  *         B:变量的变化实现
    22  * 假如相邻的两个月的兔子对数为a,b
    23  * 第1个月:   a=1,b=1
    24  * 第2个月:   a=1,b=2
    25  * 第3个月:   a=2,b=3
    26  * 第4个月:   a=3,b=5
    27  * 看到了:下一次的a是以前的b,下一次的b是以前的a+b
    28  * 
    29  *          C:递归实现
    30  */
    31 public class DiGuiDemo2 {
    32 
    33     public static void main(String[] args) {
    34         //数组实现
    35         int[] arr = new int[20];
    36         arr[0] = 1;
    37         arr[1] = 1;
    38         for(int i =2; i<=arr.length-1; i++) {
    39             arr[i] = arr[i-1]+arr[i-2];
    40         }
    41         System.out.println("数组实现---第20月兔子的对数:"+arr[19]);
    42         
    43         System.out.println("=============================");
    44         //变量的变化实现
    45         int a=1; 
    46         int b=1;
    47         for(int i=0; i<18; i++){
    48             int temp =a;                //保存a的初试值
    49             a = b;                      //这里的a发生了变化,而下面需要使用到a的初始值,所以上面定义了int temp = a;
    50             b = temp+b;
    51         }
    52         System.out.println("变量的变化实现---第20月兔子的对数:"+b);
    53         
    54         System.out.println("=============================");
    55         
    56         //递归实现
    57         System.out.println("递归实现---第20月兔子的对数:"+func(20));
    58 
    59     }
    60     
    61     public static int func(int n) {
    62         if(n==1 || n==2) {
    63             return 1;
    64         } 
    65     
    66         return func(n-1)+func(n-2);
    67     }
    68 
    69 }

    运行结果如下:

  • 相关阅读:
    起步!!!
    最简单的窗口弹出程序
    起步!!!
    写一个顺序表模板,包括顺序表的基本功能,例如查找,插
    最简单的窗口弹出程序
    [导入]8000元投资股市16年变成4亿元 中国版巴菲特?
    [导入]看到男司机被一车女歹徒侮辱,我好后悔没有能力制止!
    [导入]黑社会内部报纸一份,请含泪观看
    [导入]月薪80000的卖毛片给我上了震撼一课
    [导入]索尼新品可以握着用的怪异鼠标
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4850243.html
Copyright © 2020-2023  润新知