zoukankan      html  css  js  c++  java
  • 算法-经典趣题-兔子产仔

    一、问题

    兔子产仔是一个非常古老而经典的问题,其与数论有关。兔子产仔问题最早记载于13世纪意大利数学家斐波那契的《算盘书》,其大意如下:如果一对两个月大的兔子以后每一个月都可以生一对小兔子,而一对新生的兔子出生两个月后才可以生小兔子。也就是说,1月份出生,3月份才可产仔。那么假定一年内没有发生兔子死亡事件,那么1年后共有多少对兔子呢?

    二、问题分析

    先来分析一下兔子产仔问题。下面逐月分析每月的兔子对数。

    第一个月:1对兔子;

    第二个月:1对兔子;

    第三个月:2对兔子;

    第四个月:3对兔子;

    第五个月:5对兔子;

    ……

    可以看出,从第3个月开始,每个月的兔子总对数等于前两个月兔子数的总和。这其实就是著名的斐波那契数列。

     

    三、编程

    采用递归算法来求解。可以编写一个算法,用于计算斐波那契数列问题。可以按照此思路来编写相应的兔子产仔问题的求解算法,代码如下:

    package com.joshua317;
    
    import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
            int n, num;
            Fibonacci fibonacci = new Fibonacci();
            System.out.println("兔子产仔问题:");
            System.out.println("请先输入经过的月份:");
            Scanner scanner = new Scanner(System.in);
            n = scanner.nextInt();
            num = fibonacci.Fibonacci(n);
            System.out.printf("经过%d月,共能繁殖成%d对兔子
    ", n, num);
        }
    }
    
    class Fibonacci {
        public int Fibonacci(int n)
        {
            int n1, n2;
            if (n ==1 || n == 2) {
                return 1;
            } else {
                n1 = Fibonacci(n-1);
                n2 = Fibonacci(n-2);
                return n1 + n2;
            }
        }
    }
    Java
     

    注意:递归是个不断回调方法的过程,使方法一遍遍的压入栈中,递归次数多了,栈满了也就溢出了,所以一定要注意!

     

  • 相关阅读:
    dayjs:js时间插件
    IE:IE请求路径带中文报错
    layui:下载表格为excel文件
    VUE:导出表格为excel文件
    报错:unexpected trailing comma
    node.js报错address not available 192.168.1.4
    js防抖和节流
    mongodb的常用基础命令及操作
    mongodb下载安装及环境搭建
    vue页面缓存
  • 原文地址:https://www.cnblogs.com/joshua317/p/15217819.html
Copyright © 2011-2022 走看看