大虾,看看这道编程题怎么做? 跟这个帖子一样 http://topic.csdn.net/u/20100112/14/06f8eaf8-5e3c-4439-bbb4-552f76190118.html 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 递归题,8>2,执行con(n - 1) + con(n - 2); 也就是con(8-1)+con(8-2), 得到con(7)和con(6)。由于con(7)和con(6)还不知道答案,然后计算con(7),con(6),就继续调用public static int con(int n)方法,把7和6代入,即con(7 - 1) + con(7 - 2),和con(6 - 1) + con(6 - 2),以此类推,直到con(1)得到值为1再反推回去,最终获得答案 public void con(int month){ int[] monthcount=int[month]; if(month<1){ return 1; } for(int i=1;i<=month;i++){ if(i<3){ sum=1; monthcount[i]=1; }else{ monthcount[i]=monthcount[i-2]+monthcount[i-1]; } } System.out.println(monthcount[month-1]);} 这叫做Tree Recursion,效率是n次方的。最好用DP来解决。 con(n - 1)三个月后第一次产崽,con(n - 2)以后每个月产一次崽 http://zh.wikipedia.org/wiki/斐波那契数列 con(n - 2)是第n-2月的兔子数,这些兔子在第n月都会产崽,就是说第n月新增con(n - 2)。第n-1月有con(n-1)个, 加上新产的兔子con(n - 2)就是第n月的兔子数 到最后得到con(1) 然后 1的话执行 return 1 , con2 = 1 ,con 3 = 2 con4 = con3+con 2 = 第一个月 第二个月 第三个月 第四个月 第五个月 第六个月 第七个月 第八个月 1 1 2 3 5 8 13 21这个数字就相当于一种我们常见的规律 public static int con(int n) { if (n > 2) { return con(n - 1) + con(n - 2); } return 1; } public static void main(String[] args) { System.out.println(con(8)); 用这个con(8)随方法con()进行递归调用,当n=1或2即第一个月或第二时就返回1, 当n>2时就返回前两个月的兔子的和。 理解了吗 ?当} 匹配单一字符重复出现的正则表达式是什么?? 如何禁用JScrollPane的键盘事件响应? 关于jar打包压缩的问题 向数据库插入数据的问题 怎么以追加的方式打开文件啊?或者怎样往文件的末尾加入一行? 值传递还是引用传递? 关于JBuilder8 运行单个文件 这么一次性创建一个多层的目录,象“c://aaa//bbb//ccc” 把這個類改成Java Bean應該怎樣改? jdbc.odbc连接sql server的问题: 为什么图片会重叠? 图片与servlet的关系
public void con(int month){
int[] monthcount=int[month];
if(month<1){
return 1;
}
for(int i=1;i<=month;i++){
if(i<3){
sum=1;
monthcount[i]=1;
}else{
monthcount[i]=monthcount[i-2]+monthcount[i-1];
}
}
System.out.println(monthcount[month-1]);
}
最好用DP来解决。
第n-1月有con(n-1)个, 加上新产的兔子con(n - 2)就是第n月的兔子数
+con 2 =
1 1 2 3 5 8 13 21
这个数字就相当于一种我们常见的规律
public static int con(int n) {
if (n > 2) {
return con(n - 1) + con(n - 2);
}
return 1;
} public static void main(String[] args) {
System.out.println(con(8)); 用这个con(8)随方法con()进行递归调用,当n=1或2即第一个月或第二时就返回1, 当n>2时就返回前两个月的兔子的和。 理解了吗 ?
当
}