java面向对象解决兔子问题_50道经典题之兔子问题面向对象编程

[Java] 纯文本查看 复制代码/*

斐波那契数列:

兔子问题:

有一对兔子,从出生后第3个月起每个月都生一对兔子,

小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,

问每个月的兔子对数为多少?

*/

/*

分析:

常规的思想是用数学上的斐波那契数列通过递归的方法来实现的。下面的程序一(Prog1)

就是利用斐波那契数列的规律递归调用,来解决数量的问题。

但是,这种方法太过于理想化在遇到实际问题时,比如兔子如果会死,这个方法显然无法

应付相应情况。

故而,本人利用了面向对象的方法进行递归套用,同样解决了这一问题,并且可扩展性更强。

但是有一个较大的弊端为创建对象较多运行速度稍慢。但优点也很明显就是能计算兔子死这种

情况下的兔子总数

*/

public class Q1RabbitQuestion{

public static void main(String[] args){

//这里只需要创建一个可以生兔子的兔子即可

DoubleRabbit r = new DoubleRabbit();

//开始生兔子,传入想知道个数的月数,打印总数

System.out.println("第30个月兔子总数为:"+r.born(30));

}

}

/*

定义一个一对兔子的类,兔子对象的功能就是生小兔子和输出给定月数小兔子的总数。

所以它需要有一个count成员变量来存放兔子总数,一个born方法来生小兔子。

*/

class DoubleRabbit{

//用来存放兔子总数(第一个兔子算一个)

private int count = 1;

//生小兔子方法

public int born(int monthNum){

for(int i=1; i<=monthNum; i++){

//三个月后才开始生小兔子,以后每个月生一个

if(i>=3){

//创建一个小兔子对象

DoubleRabbit doubleR = new DoubleRabbit();

//doubleR兔子生兔子,并返回doubleR兔子所生兔子总数(包括它自己)

//这里参数monthNum-i+1之所以要+1是因为,在第三个月后,子兔子已经生了一个月了

count += doubleR.born(monthNum-i+1);

}

}

//周期结束后返回兔子总数。

return count;

}

}

/*

Prog1是纯斐波那契数列的使用方法

*/

/*class Prog1{

public static void main(String[] args){

int n = 30;

System.out.println("第"+n+"个月兔子总数为"+fun(n));

}

private static int fun(int n){

if(n==1 || n==2)

return 1;

else

return fun(n-1)+fun(n-2);

}

}*/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值