【转】一个农民养了一头牛,三年后,这头牛每年会生出1头牛,生出来的牛三年后,又可以每年生出一头牛…问农夫10年后有多少头牛?n年呢?(用JAVA实现)

【转】一个农夫养了一头牛,三年后,这头牛每年会生出1头牛,生出来的牛三年后,又可以每年生出一头牛……问农夫10年后有多少头牛?n年呢?(用JAVA实现)
     class Cow
          {
          private int age;

          public Cow()
          {
          age = 0;
          }

          public Cow bearCow()//生小牛
          {
          return new Cow();
          }

          public void grow()//每年牛龄加1
          {
          age = age + 1;
          }

          public int getAge()
          {
          return age;
          }
          }
          public class Main {
          private static Set cowSet = new HashSet ();//牛圈,存放所有的牛

          public static int check()//每年检测一遍所有的牛,年龄要加一,并且够岁数了要生效牛
          {
          Set newCowSet = new HashSet ();
          for(Cow cow : cowSet)
          {
          cow.grow();//年龄加一
          if(cow.getAge() >= 3)
          newCowSet.add(cow.bearCow());//够岁数的生小牛
          }
          cowSet.addAll(newCowSet);//把所有生出来的小牛放牛圈里
          return cowSet.size();
          }
          public static void main(String args[])
          {
          Cow cow = new Cow();
          cowSet.add(cow);
          for(int i = 0; i < 10; i ++)
          {
          System.out.println(i+1 + " : " + check());
          }
          }

          }

 public class Cow {
          public static int coun = 1;

          public static void main(String args[]) {
          new Cow().cowY(10);
          System.out.println(coun);
          //System.out.println(Cow.getNum(10));
          }


          public static int getNum(int i) {
          if (i < 3) {
          return 1;
          } else {
          return getNum(i - 1) + getNum(i - 2);

          }

          }
          public void cowY(int year) {
          int age = 1;
          while (age <= year) {
          age++;
          if (age <= year && age >= 3) {
          coun++;
          cowY(year - age);
          }
          }
          }
          }