校招准备系列:每天一道算法题(3)
PS:今天的题目是来自java经典算法40题,希望自己的算法能力有一个长足的提高,以在校招中能找到一份好的工作!
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第4个月后每个月又生一对兔子,加入兔子都不死,问每个月的兔子总数为多少?
思路:对于这道古典问题,最直接的办法就是找规律,这里以20个月为参数,兔子的规律为数列:1 1 2 3 5 8 13 21。。。。。
很明显的我们可以使用递归的方法进行求解这个题,完成算法如下:
public static int sum(int x){
if (x==1||x==2) {
return 1;
}else {
return sum(x-1)+sum(x-2);
}
}
写出完整的代码如下:
package chen.zhou.chous;
/**
* 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第4个月后每个月又生一对兔子,加入兔子
* 都不死,问每个月的兔子总数为多少
* @param args
*/
public class GdwtTz {
/*
* 分析:兔子规律为1 1 2 3 5 8 13 21
*/
public static void main(String[] args) {
for (int i = 1; i <= 20; i++) {
System.out.println(sum(i));
}
}
public static int sum(int x){
if (x==1||x==2) {
return 1;
}else {
return sum(x-1)+sum(x-2);
}
}
}
结束语:再次收割一枚offer,昨天间断是因为去办理入职手续之类的七七八八的,继续努力!!!