用面向对象的方式解决经典的“三月兔”的问题

  这是一个经典问题:有一对兔子,从出生后第三个月开始,每个月都生一对兔子,然后生出来的兔子也从出生第三个月开始每个月生一对兔子,假如兔子都不死,问每个月兔子总数是多少。

  这个问题其实是一个斐波纳切数列,主要考虑递归的用法,这道题的"标准答案"就是用递归的方式来解决:

  然而,这么做其实并不是按面向对象的思路来解决的。这是先画出表格,然后找出数字的排列规律,然后再写公式。

  对于这种问题,我还是喜欢用面向对象的思路来解决它。

  如果要以面向对象的思路来做,应该写一个兔子的对象,然后根据它的繁殖规律进行繁殖,下面就是按照面向对象思路来解决这个问题:

这样的话,不管这个兔子从第几个月开始生几只小兔子,都可以通过修改构造函数来解决了。

时间: 2024-08-09 02:16:57

用面向对象的方式解决经典的“三月兔”的问题的相关文章

三种方式解决你的js加载乱码

第一种方式——编码统一 我们以前觉得出现乱码的原因是因为编码不统一,就是因为我们设置编码统一之后,就解决了问题,所以,让html和js的编码统一,是最简单的一个乱码解决方式,原因是什么,是因为,如果你在加载js的时候,并没有声明js的编码格式,那么浏览器会默认的按照当前html的编码格式进行解析引入的js文件,如果你的js和本身页面编码不一样,并且js中引入了中文字符,那么肯定会出现乱码的.要知道,程序都是笨笨的. 第二种方式——在引入js的标签中加入charset属性 这样引入,那么这个xx.

PHP中将对数据库的操作,封装成一个工具类以及学会使用面向对象的方式进行编程

<?php class SqlTool { //属性 private $conn; private $host="localhost"; private $user="root"; private $password="root"; private $db="test"; function SqlTool(){ $this->conn=mysql_connect($this->host,$this->u

[.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口IXmlSerializable实现XML序列化及XML通用类

[.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口IXmlSerializable实现XML序列化及XML通用类 本节导读:本节主要介绍通过序列化接口IXmlSerializable实现XML序列化和反序列化,整理了XML基础操作及序列化的通用类(包括XML及节点的基础读写操作,XML到DataSet\DataTable互转换操作,XML序列化及反序列化通用方法等). 读前必备: A.类和类的实例 [.net 面向对象编程基础]  (9) 类和类的

如何以面向对象的方式看待世界

什么是面向对象,怎么样以面向对象的思维来看待这个世界,分析问题? 面向对象只是一种看待问题的方法而已,如果今后有比这更加有效的方法,那么新的方法就可以取代面向对象的方法.面向对象和面向过程的争议是没有意义的,因为它们不过是两种看待问题的不同方法而已,哪一种方法更加有效取决于要解决的问题.在我看来,面向对象的方法可以更好的取代面向过程的方法.在这里我不会谈论面向过程的方法,因为每个人习惯性地用面向过程的方法来看待周遭的世界,而要以面向对象的方式看待问题,这个还真得花费一番功夫.就如同甲壳类动物要成

Java高并发,如何解决,什么方式解决

对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了.而并发问题是绝大部分的程序员头疼的问题, 但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们一起来研究一下常见的并发和同步吧. 为了更好的理解并发和同步,我们需要先明白两个重要的概念:同步和异步    1.同步和异步的区别和联系 所谓同步,可以理解为在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是出于阻塞的,只有接收到 返回的值或消息后才往下执行其它的命令. 异步,执行完函数或方法

[.net 面向对象程序设计进阶] (7) Lamda表达式(三) 表达式树高级应用

[.net 面向对象程序设计进阶] (7) Lamda表达式(三) 表达式树高级应用 本节导读:讨论了表达式树的定义和解析之后,我们知道了表达式树就是并非可执行代码,而是将表达式对象化后的数据结构.是时候来引用他解决问题.而本节主要目的就是使用表达式树解决实际问题. 读前必备: 本节学习前,需要掌握以下知识: A.继承 [.net 面向对象编程基础]  (12) 面向对象三大特性——继承 B.多态 [.net 面向对象编程基础]  (13) 面向对象三大特性——多态 C.抽象类 [.net 面向

通过迁移的方式解决Active Directory服务器问题之6

(接上一篇) (21)打开"欢迎使用证书颁发机构还原向导"对话框,如图6-21所示. 图6-21 还原向导 (22)在"要还原的项目"对话框,选择要还原的项目,在此选择"私钥和CA证书"和"证书数据库和证书数据库日志",单击"浏览"选择第1节证书备份的文件夹,如图6-22所示. 图6-22 要还原的项目 (23)在"提供密码"对话框中,输入备份证书时设置的密码,如图6-23所示. 图6-

菜鸟系列之C/C++经典试题(三)

设计包含min函数的栈 题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素.要求函数min.push以及pop的时间复杂度都是O(1). 分析:这是2006年google的一道面试题. 我看到这道题目时,第一反应就是每次push一个新元素时,将栈里所有逆序元素排序.这样栈顶元素将是最小元素.但由于不能保证最后push进栈的元素最先出栈,这种思路设计的数据结构已经不是一个栈了. 在栈里添加一个成员变量存放最小元素(或最小元素的位置).每次push一个新元素进栈的时候,如果该元素比

使用桥接方式解决虚拟机联网问题

本文全部参考:http://jingyan.baidu.com/album/4e5b3e1957979d91901e24f1.html?picindex=1,谢谢 使用桥接方式解决虚拟机联网 打开VMware找到编辑--虚拟机网络编辑器,点击更改设置(右下角)可以看到: 接上一条,怎么查看真实机上的使用什么网卡联网的呢?打开网络和共享中心--在左边点击更改适配器设置 这里可以看到,无线网卡的属性. 而原文作者中使用的有线,对应的网卡也是不同的,如下: 步骤二:  选择虚拟机连接方式: 重启网卡和