刚开始学习递归,我对这个细菌问题感到困惑。基本上,我必须创建一种在一定时间内繁殖细菌的方法。模式/公式为bacteriaLastHour + bacteriaLastHour * 2
。例如,一小时后将有10 + 10 * 2 = 30细菌,而2小时后将有30 + 30 * 2 = 90细菌。
这是我的代码:
public static int numBacteriaAlive(int hour)
{
int bacteriaLastHour = 10;
int total = 0;
// Write a base case
if(hour == 0){
return 10;
}
// Write a recursive call
total += (bacteriaLastHour * 2) + numBacteriaAlive(hour-1);
bacteriaLastHour *= 3;
return total;
}
在1和2小时中,该方法可以正常工作,返回10和30。但是在其他小时中,变量bacterialLastHour不变,因此返回的数字关闭。我的代码会在2小时内返回50(应为90),在3小时内返回70(应为270),依此类推。任何建议都会有所帮助,谢谢!
编辑:无法更改参数值
最佳答案
它比您想象的要简单得多:
public static int numBacteriaAlive(int hour) {
if (hour == 0) { // base case
return 10;
}
int bacteriaLastHour = numBacteriaAlive(hour-1); // recursive case
return bacteriaLastHour*3;
}
注意:
bacteriaLastHour + 2*bacteriaLastHour
与bacteriaLastHour*3
相同一旦编写了基本情况(对于
hour==0
),则必须相信numBacteriaAlive(hour-1)
将返回正确的值。一旦知道,返回当前小时值的答案很容易。