A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhanghua 黑马帝   /  2011-11-15 12:31  /  1367 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zhanghua 于 2011-11-21 13:59 编辑

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

答案如下

public class RabbidsCount2 {
public static void main(String[] args) {
  // 直接从第三个月开始算起
  int m1=1;
  int m2=0;
  int m3=1;
  for(int i=3;i<40;i++){
   m1=m1+m2;
   m2=m3;
   m3=m1;
  }
  System.out.println(m1+m2+m3);
}

}
第二种解法:

public static void main(String args[]){
int i=0;
for(i=1;i<=40;i++)
System.out.println(f(i));
}
public static int f(int x)
{
if(x==1 || x==2)
return 1;
else
return f(x-1)+f(x-2);
}
第二种解法我不太懂,假如将刚生的小兔子第一次生小兔子是隔四个月,则我不知道第二种解法该如何解答。望各位进行留言,进行帮助,不胜感激


看完顶,,

4 个回复

倒序浏览
清秋 黑马帝 2011-11-15 13:19:44
沙发
本帖最后由 清秋 于 2011-11-15 13:40 编辑

第一种方法,可读性太差。我是没理解到了。

第二种方法是 典型的“递归”,基本上介绍语言的书上都会提一提递归,然后举个这个例子
回复 使用道具 举报
清秋 黑马帝 2011-11-15 13:38:31
藤椅
  1.         public static void main(String args[])
  2.         {
  3.                 int i=0;
  4.                 for(i=1;i<=40;i++)
  5.                         System.out.println(f(i));
  6.         }
  7.         public static int f(int x)
  8.         {
  9.                 if(x==1 || x==2 || x == 3)        //        1
  10.                         return 1;
  11.                 else
  12.                         return f(x-1)+f(x-3);        //        2
  13.         }
复制代码
在你的代码处修改2处,就可以实现了隔4个月生小兔了
你可以写出每个月小兔的数量,写个10个月就能总结出规律了
回复 使用道具 举报
看看,,,,,值的,,,参考
回复 使用道具 举报
好知识,这个知识点挺好的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马