利用斐波那契数列解决兔子数的算法(java)

今天看到一道算法题,算了半天没算出来,后来查了资料,原来这是一道关于斐波那契数列题目,题目是:

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

我开始的思路是先把每个月的兔子数列出来

  1. f1 =1;
  2. f2 =1;
  3. f3 = f2+1=2;
  4. f4 = f3+1=3;
  5. f5 = f4+1+1=5;
  6. f6 = f5+1+1+1=8;
  7. f7 = f6+1+1+1+1+1=13
  8. …… (一直循环下去)

这样的话规律就来了
1.f3 = f1+f2;
2.f4=f2+f3;
3.f5 =f3+f4;
……

从第三项起,每一项都等于前两项的和;
实现两数相加,然后就是前两个数进行互换,然后我写了那么一段代码
public class Suanfa1{
public static void main(String [] args){
int f1 =1;
int f2=1;
int c; // 设一个中间变量
int M=12;
for(int i =3;i<=M;i++){
c = f2;
f2= f1+f2;
f1=c; //对a.b值进行互换
System.out.println("第"+i+"个月的兔子数为:"+f2+"对");
}
}
}

运行结果如下:

第3个月的兔子数为:2对
第4个月的兔子数为:3对
第5个月的兔子数为:5对
第6个月的兔子数为:8对
第7个月的兔子数为:13对
第8个月的兔子数为:21对
第9个月的兔子数为:34对
第10个月的兔子数为:55对
第11个月的兔子数为:89对
第12个月的兔子数为:144

之后我舍友看了代码之后说代码可以更加简化,然后他用了如下这个算法把循环体内的运算式化成了只剩两条,他的算法是这样的:

public class Suanfa1{
public static void  main(String [] args){
            int now =1;    
            int last =0;
            int M=12;    //   设置时间为一年
            for(int i =1;i<=M;i++){
                System.out.println("第"+i+"个月的兔子数为:"+now+"对");   
                now+=last;  
                last =now-last;

            }   
        }
    }

运行结果如下:

第1个月的兔子数为:1对
第2个月的兔子数为:1对
第3个月的兔子数为:2对
第4个月的兔子数为:3对
第5个月的兔子数为:5对
第6个月的兔子数为:8对
第7个月的兔子数为:13对
第8个月的兔子数为:21对
第9个月的兔子数为:34对
第10个月的兔子数为:55对
第11个月的兔子数为:89对
第12个月的兔子数为:144
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值