算法设计兔子问题

古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问某个月的兔子总数为多少?

分析:出生后第3个月起每个月都生一对兔子,说明第n个月一对兔子生下了n-3对兔子;

小兔子长到第三个月后每个月又生一对兔子;说明这是一个同样问题,可以递归

源码如下:

/**
     * @param month  月份
     * @return  某月兔子总数
     */
    public static int rabbitQuestion(int month){
        int sum=1;// 初始化 兔子1
        if (month<3) {//处理出生时间月份低于第三个月的兔子数
            sum=1;
        }else{
            for(int i=month-2;i>=1;i--)    {//某对兔子后代总数计算
                    sum+=rabbitQuestion(i);
            }
        }
        return sum;//某对兔子后代总数
    }
时间: 2024-08-05 04:55:31

算法设计兔子问题的相关文章

《PHP程序员面试笔试宝典》——如何回答算法设计问题?

如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 程序员面试中的很多算法设计问题,都是历年来各家企业的"炒现饭",不管求职者以前对算法知识掌握得是否扎实,理解得是否深入,只要面试前买本<程序员面试笔试宝典>,应付此类题目完全没有问题.但遗憾的是,很多世界级知名企业也深知这一点,如果纯粹是出一些毫无技术含量的题目,对于考前"突击手"而言,可能会占尽便宜,但对于那些技术好的人而言是非常不公平的.所以,为了把优秀的求职者与一般的求

(转)常用的算法设计与分析-一夜星辰的博客

算法设计与分析 分治法 思想 1. 将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同.递归地解这些子问题,然后将各子问题的解合并得到原问题的解. 2. divide-and-conquer(P) { if(|P| <= n0)adhoc(P); divide P into samller subinstances P1,P2...,Pk; for(int i = 1;i < k;i++) { yi = divide-and-conquer(Pi); } retu

AACOS:基于编译器和操作系统内核的算法设计与实现

AACOS:基于编译器和操作系统内核的算法设计与实现 [计算机科学技术] 谢晓啸 湖北省沙市中学 [关键词]: 编译原理,操作系统内核实现,算法与数据结构,算法优化 0.索引 1.引论 1.1研究内容 1.2研究目的 1.3研究提要 正文 2.1研究方法 2.2编译器部分 2.2.1从计算器程序中得到的编译器制作启示 2.2.2在编译器中其它具体代码的实现 2.2.3编译器中栈的高级应用 2.2.3编译器中树的高级应用 2.2.4编译器与有限状态机 2.3操作系统内核部分 2.3.1操作系统与底

“谁是大V”算法设计 (Map-Reduce TopN)

作业设计与资料 链接: http://pan.baidu.com/s/1o6MJTyi 密码: 628d 一.     作业要求   根据关注列表relsample.json文件,设计MapReduce算法得到被关注次数最多的前十人,即寻找谁是大V. 二.     算法设计   第一个Mapper用于解析json文件: 从relsample.json文件中解析出ids列表的内容,即每个人所关注的人的列表.输出的value为列表中的每一项,k为one. 对应的文件为\src\myMapper\re

【字符串处理算法】将输入字符串中的各个单词反序的算法设计及C代码实现

一.需求描述 输入一个字符串,编写程序将该字符串中的各个单词反序拼装并输出.例如,如果输入的字符串是"Hello, how do you do",那么输出的字符串为"do you do how Hello,".注意保留各个单词之间的空格及相应的标点符号. 二.算法设计 通过观察示例字符串(即"Hello, how do you do"),我们可以看到该字符串中各个单词与空格之间的关系为:单词总数=空格总数+1.也就是说,示例字符串中的空格总数为4

《算法之道》精华 算法设计部分

<算法之道>精华 算法设计部分 本书作者邹恒明,作者另有一本书<数据结构之弦>,以及<操作系统之哲学原理>都是非常好的书 这本书能够算得上是深入浅出.文笔非常好,作者加入了非常多自己的思考 本文仅包含算法设计部分,算法分析略去,并没有严格依照章节顺序来记录 附录 算法随想 有人喜欢遍历,希望踏遍千山万水,人生丰富多彩:有人一生贪婪,眼界不宽,及时行乐:有人注定穷搜,辛辛苦苦,收获有限:有人善用时空均衡,用最少的时间办最多的事情.十分精明:有人会分治,再难的问题也能解决.

《数据结构与算法分析:C语言描述》复习——第十章“算法设计技巧”——Alpha-Beta剪枝

2014.07.08 22:43 简介: “搜索”与“剪枝”几乎是如影随形的.此处的“搜索”指的是带有回溯算法的深度优先搜索. 在之前的“Minimax策略”中我们给出了一个三连棋的程序,运行后你就知道计算一步棋要花多少时间. 为了计算最优的一步棋,我们可能需要递归9万多次.如果毫无疑问这种阶乘式的穷举过程必须通过剪枝来加速. 本篇介绍一种用于Minimax策略的剪枝思路——α-β剪枝. 剪枝的英语是pruning,所以不要想当然说成trimming. 图示: 在上一篇讲解Minimax策略的博

【转载】数据结构与算法设计

原文: 数据结构与算法设计

算法设计之0-1背包问题

1.题目分析: 考虑到每种物品只有2 种选择,即装入背包或不装入背包,并且物品数和背包容量已给定,要计算装入背包物品的最大价值和最优装入方案,可用回溯法搜索子集树的算法进行求解. 2.算法设计:a. 物品有n种,背包容量为C,分别用p[i]和w[i]存储第i种物品的价值和重量,用x[i]标记第i种物品是否装入背包,用bestx[i]存储第i种物品的最优装载方案:b. 用递归函数Backtrack (i,cp,cw)来实现回溯法搜索子集树(形式参数i表示递归深度,n用来控制递归深度,形式参数cp和