刚开始学习递归,我对这个细菌问题感到困惑。基本上,我必须创建一种在一定时间内繁殖细菌的方法。模式/公式为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*bacteriaLastHourbacteriaLastHour*3相同

一旦编写了基本情况(对于hour==0),则必须相信numBacteriaAlive(hour-1)将返回正确的值。一旦知道,返回当前小时值的答案很容易。

08-06 12:28