一头小牛,小牛成长到第四年开始,会每年生一头小牛,N年后共有多少头牛

来源:互联网 发布:淘宝客计入搜索权重吗 编辑:程序博客网 时间:2024/04/30 07:57




 方法一:面向对象

public class Cow { /*   * 一个农夫,买了一头小牛,这头小牛成长到第四年开始,会每年生一头小牛,  * 所出生的小牛成长到第四年开始,也会每年生一头小牛,请问N年后,农夫共有多少头牛  *   */  private int age;  public Cow() {  // TODO Auto-generated constructor stub  age = 1; } //增加年龄 public void addAge() {  age ++; }   //是否可以生产小牛 public boolean isCanBirth() {  return age >=4; }  /**  * @param args  */ public static void main(String[] args) {  // TODO Auto-generated method stub  int N=11;  List<Cow> list = new ArrayList<Cow>();  list.add(new Cow());    for (int i = 1; i <= N; i++) {      for (int j = 0; j < list.size(); j++) {    Cow cow =list.get(j);    if(cow.isCanBirth()){     list.add(new Cow());    }        cow.addAge();   }   System.out.println("第"+i+"年,牛的数量" + list.size());  }    System.out.println(N + "年后,牛的数量:"+ list.size()); }}


 

第1年,牛的数量1
第2年,牛的数量1
第3年,牛的数量1
第4年,牛的数量2
第5年,牛的数量3
第6年,牛的数量4
第7年,牛的数量6
第8年,牛的数量9
第9年,牛的数量13
第10年,牛的数量19
第11年,牛的数量28
11年后,牛的数量:28

 

方法二:递归

 public static void main(String[] args) {// TODO Auto-generated method stubint N=11;long num =new Cow().fun(N);System.out.println(N + "年后,牛的数量:"+num);}public long fun(int n) {long num=0;if(n==1 || n==2 || n==3){num=1;}else{num = fun(n-3)+fun(n-1);//今年小牛总数量=今年新生的小牛+去年小牛的数量        }return num;}


 

 

方法三:递归

private static int sum =1;public static void main(String[] args) {// TODO Auto-generated method stubint N=11;new Cow().fun(N);System.out.println(N + "年后,牛的数量:"+sum);}public void  fun(int n){int y = n-3;//父代可生的子代数量if(y>0){sum = sum +y;for(int i=0;i<(y-1);i++){//子代可生子代的数量fun(n-(3+i));}}}


 

 

 

 

 

原创粉丝点击