经典算法40例:1

  1.有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第4个月后,每个月又生一对兔子,

假如兔子不死,问每个月的兔子总数为多少?

  解题思路:先算出几个月的兔子总对数,转化为数学找规律,

  题目中有个注意的条件,刚出生的小兔子长一个月具有生育能力.

  如图:1表示有生育能力的1对兔子,①表示没有生育能力的一对兔子

  

  规律一看便知,第7个月的等于第6个月的加第5个月的.可以用递归.

  

package com.qd.math40;

/**
 * Created by chenlongbo on 2017/6/3.
 */
public class Rabbits {

    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++ ){
            System.out.println("第"+i+"月,兔子的对数为:"+f(i));
        }
    }

    public static int f(int n){
        if(n == 1 || n == 2)
            return 1;
        else
        return f(n-1) + f(n - 2);
    }
}

程序运行解果:

第1月,兔子的对数为:1
第2月,兔子的对数为:1
第3月,兔子的对数为:2
第4月,兔子的对数为:3
第5月,兔子的对数为:5
第6月,兔子的对数为:8
第7月,兔子的对数为:13
第8月,兔子的对数为:21
第9月,兔子的对数为:34
第10月,兔子的对数为:55

  

时间: 2024-11-06 18:32:18

经典算法40例:1的相关文章

JAVA经典算法40题(1-20)

[程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?   1.程序分析:   兔子的规律为数列1,1,2,3,5,8,13,21....   public class exp2{ public static void main(String args[]){  int i=0;  for(i=1;i<=20;i++)   System.out.println(f(i)); } publ

JAVA经典算法40题

[程序1]题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不 死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... public class exp2{ public static void main(String args[]){ int i=0; for(i=1;i<=20;i++) System.out.println(f(i)); }public static int

【转】JAVA经典算法40题

转自:http://blog.csdn.net/chrp99/article/details/8771592 [程序1]题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....public class exp2{ public static void main(String args[]){ int i=0; for(i=1;i<

java经典算法40题(21-40)

[程序21]   题目:求1+2!+3!+...+20!的和   1.程序分析:此程序只是把累加变成了累乘.   public class Ex21 { static long sum = 0;  static long fac = 0; public static void main(String[] args) {    long sum = 0;     long fac = 1;    for(int i=1; i<=10; i++) {     fac = fac * i;     s

Java经典算法案例

笔试中的编程题3 JAVA经典算法40例[程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... public class exp2{public static void main(String args[]){int i=0;for(i=1;i<=20;i++)System.out.println(f(i));}pu

经典算法学习之分治法(以排列、组合程序为例)

分治法的思想:将原问题分解为几个规模较小但类似于原问题的子问题,递归的求解这些子问题,然后再合并这些子问题的解来建立原问题的解. 分治法在每层递归是遵循的三个步骤: (1)分解原问题为若干个子问题,这些子问题是原问题的规模较小的实例. (2)解决这些子问题,队规的求解各个子问题,当子问题规模足够小的时候,直接求解. (3)合并这些子问题的解构成原问题的解. 显然归并排序是一个非常经典规矩的分治法的例子,鉴于之前已经写过一篇关于归并排序的博文,这里不在使用归并排序作为例子. 注意分治法的每一层递归

数据挖掘经典算法——先验算法

算法描述 先验算法是实现频繁项挖掘的一种经典算法,利用关联式规则不断扩展频繁项子集以获得全部的频繁项集合.解释一下关联式规则,所谓关联式是指在大量的数据中找出的项与项之间的关系.例如消费者购买了产品A,一般都会购买产品B,这就是一条关联式. 先验算法被设计用来处理包含事务的数据库,这里的每一个事务都被当成是一组项集,给定一个阈值C,我们需要找出至少出现C次的事务子集(即子项).这边这个C值就是最小支持度,规定了一个项集出现多少次才能被认为是一个频繁项. 先验算法的核心思想基于以下一个事实:一个项

经典算法大全

原文地址:经典算法大全 作者:liurhyme 经                                                                    典                                                                    算                                                                    法                  

JAVA经典算法50题(转)

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/51097928 JAVA经典算法50题 [程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... [java] view plain copy public class Demo01 { public s