首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >算法-经典趣题-兔子产仔

算法-经典趣题-兔子产仔

作者头像
joshua317
发布于 2021-09-08 15:34:29
发布于 2021-09-08 15:34:29
1.3K0
举报
文章被收录于专栏:技术博文技术博文

一、问题

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

二、问题分析

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

第一个月:1对兔子;

第二个月:1对兔子;

第三个月:2对兔子;

第四个月:3对兔子;

第五个月:5对兔子;

……

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

三、编程

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

代码语言:javascript
复制
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", 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

Copy

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

本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/69

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 一、问题
  • 二、问题分析
  • 三、编程
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档