兔子生兔子问题(斐波那契数列)

一道经典的算法问题。

题目:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子。假如兔子都不死,要求输出一年内兔子的数量是多少。

1 1 2 3 5 8……

代码如下:

//兔子问题(斐波那契)

package com.hxzy.homework;

public class HomeWork05 {

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        int month = 12;

        int sum = fab(month);

        System.out.println(sum);

        System.out.println(fab_1(month));

    }

    static int fab(int month){

        if(month<=2)

            return 1;

        else if(month==3)

            return 2;

        else

            return 2*fab(month-1)-fab(month-3);

//          return fab(month-1) +(fab(month-1)-fab(month-2)) +(fab(month-2)-fab(month-3));

//          返回值为,上月兔子数+上月增加的兔子数+两个月前新增兔子数

    }

    static int fab_1(int n){

        if(n<=2return 1;

        else return fab_1(n-1)+ fab_1(n-2);

    }

用递归法求解最简单,上面代码fab()是根据题意写出的代码。由于兔子第三个月开始会生小兔子,所以此道题目的关键逻辑是:

本月兔子数=上月兔子数 + 上月增加的兔子数 + 两个月前新增兔子数,

即:fab(n) = fab(n-1) +(fab(n-1)-fab(n-2)) + (fab(n-2)-fab(n-3));

亦即:fab(n)=2*fab(n-1) - fab(n-3)

这一逻辑较斐波那契数列更好理解。

原文地址:https://www.cnblogs.com/coolyouguo/p/11990935.html

时间: 2024-10-04 22:42:07

兔子生兔子问题(斐波那契数列)的相关文章

生兔子的问题(斐波那契数列)

class Program    {        static void Main(string[] args)        {/*题目:有1对幼兔,一个月长成小兔,再一个月长成成兔并生一对小兔,问24个月之后有多少对兔子                       int you=1,xiao=0,cheng=0,sum=0;//幼兔you=1,小兔xiao=0,成兔cheng=0,总数sum=0            for(int i=1;i<=24;i++)            {

斐波那契数列的三种时间复杂度

/*前边两个为一种做法*/ /*后边有另外的做法(差分方程以及利用矩阵去做)*/ //***************************************************//***************************************************//*************************************************** 第一种做法 这是2018王道数据结构考研复习指导的第一章思维拓展的题目. 关于斐波那契数列的简介:

【Python】【demo实验14】【练习实例】【斐波那契数列】【经典兔子生小兔子问题】

古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 每个月的兔子数量 1:22:23:4 2+24:6 2+2+25:10 2+2+2+2+26:16 6+6+47:26 10+10+6 第一个月和第二个月兔子不繁殖 第三个月,两个兔子繁殖两个兔子,共四个 第四个月,两个兔子继续繁殖两个兔子,小兔子不繁殖:共6个 以此类推 2,2,4,6,10,16,26 这个数量刚好是斐波那契数列 的两倍 源代码: #

Java 兔子问题(斐波那契数列)扩展篇

Java兔子问题(斐波那契数列)扩展篇 斐波那契数列指的是这样一个数列 0, 1, 1, 2,3, 5, 8, 13, 21, 34, 55, 89, 144, ...对于这个数列仅仅能说将兔子生产周期第为3月.假设生成周期变成4月这个数列肯定不是这种,或者说兔子还有死亡周期,在这里我是对兔子生产周期没有限定.仅仅要月份大于生产周期都能够计算出第month月份究竟能产生多少对兔子. Java兔子生殖问题 斐波那契数列又因数学家列昂纳多·斐波那契以兔子生殖为样例而引入.故又称为"兔子数列"

js 斐波那契数列(兔子问题)

对于JS初学者来说,斐波那契数列一直是个头疼的问题,总是理不清思路. 希望看完这篇文章之后会对你有帮助. 什么是斐波那契数列 : 答: 斐波那契数列,又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列".  指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.-- 题目:有个人想知道,一年之内一对兔子能繁殖多少对?于是就筑了一道围墙把一对兔子关在里面.已知一对兔子每个月可以生一对小兔子,而一对

斐波那契数列-兔子问题

/************************************************************************************************  题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,*  小兔子长到第三后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? *  1.程序分析: 兔子(对)的规律为数列1,1,2,3,5,8,13,21....* @param args* [斐波那契数列]*********

斐波那契数列——兔子繁殖问题

斐波那契数列又因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”. 斐波那契数列 一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来.如果所有兔都不死,那么一年以后可以繁殖多少对兔子? 我们不妨拿新出生的一对小兔子分析一下: 第一个月小兔子没有繁殖能力,所以还是一对; 两个月后,生下一对小兔民数共有两对; 三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对; --- 依次类推可以列出下表: 经过月数:0,1,2,3,4,5,6,7

4.古典问题:有一对兔子(斐波那契数列)

题目: /** * 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子, * 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个 * 月的兔子总数为多少? * */ 解析: /** * 1.这是一个斐波那契数列,第三个数等于前两个数之和 * 2.定义变量,第一个数,第二个数,第三个数,都会随着月数的变化而变化 * 总而言之就是动态的 * 第一,第二,第三都是相对的 */ public class Programmer1 { public static void main

js算法集合(二) javascript实现斐波那契数列 (兔子数列) Javascript实现杨辉三角

js算法集合(二)  斐波那契数列.杨辉三角 ★ 上一次我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,这次,我们来对斐波那契数列和杨辉三角进行研究,来加深对Javascript的理解. 一.Javascript实现斐波那契数列 ①要用Javascript实现斐波那契数列,我们首先要了解什么是斐波那契数列:斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为