斐波那契(面向对象方法实现和规律实现两种方法)

准备年后跳槽 找了些简单的面试题 练练手

import java.util.ArrayList;
import java.util.List;


public class 斐波拉契 {


public static void main(String[] args) {
        for(int i=1;i<=9;i++){
    //面向对象方法
         System.out.println("第"+i+"个月的兔子数"+new RabbitManager().getAll(i));
         //第二种方法(规律 简单暴力)
         System.out.println("第"+i+"个月的兔子数"+rabbitsMonth(i));
         
}

//按照规律来找 比较简单
    //定义三种兔子  一个月大的小兔子  两个月大的中兔子  三个月及以上的大兔子
//小=大+中
//大=中+大
//中=小 
public static int rabbitsMonth(int month){
int 0; //大
int 0; //中
int 1; //小
if(month == 1){
return (a+b+c);
}
for(int i=2;i<=month;i++){
int tempC c;
b;
b;
tempC;
}
return (a+b+c);
}



}

class PairRabbit{
// ,2 ,3
private int age;
private List childen new ArrayList();

public PairRabbit(){
this.age 1;
}

//生产小兔子的方法
public void makeRabbit(){
PairRabbit rabbit null ;
if(age<0) return;
switch(age){
   case :
   break;
   case :
   break;
   default:
   rabbit new PairRabbit();
       if(childen.size()>0){
        for(PairRabbit childen){
        p.setAge(p.getAge()+1);
        }
       }
       childen.add(rabbit);
   break;        
}
}

//获取这对兔子的所有孩子的对数
public int getChildNum(){
int childNum 0;
for(int i=0;i<(age-2);i++){
makeRabbit();
}
childNum getChilden().size();
return childNum;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age age;
}

public List getChilden() {
for(int i=0;i<(getAge()-2);i++){
makeRabbit();
}
return childen;
}

public void setChilden(List childen) {
this.childen childen;
}

}

class RabbitManager{
//所有兔子的子孙
List all ;

public RabbitManager(){
all new ArrayList();
}

//通过第一对兔子获取他所有的子孙兔子  好比根节点获取所有衍生出来的子节点
public void getAllChilden(PairRabbit rp){
List rabbits rp.getChilden();
all.addAll(rabbits);
if(rabbits.size()>0){    
   for(PairRabbit rp1 rabbits){
   getAllChilden(rp1);
   }
}
}

//返回所有兔子的数量
public int getAll(int month){
int sum 0;
PairRabbit rp new PairRabbit();
rp.setAge(month);
getAllChilden(rp);
sum all.size()+1;
return sum;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值