Basi c рекурсия с бактериями - PullRequest
0 голосов
/ 28 мая 2020

Только начинаю изучать рекурсию, и я сбит с толку этой проблемой бактерий. По сути, я должен создать метод, который размножит бактерии в течение определенного количества часов. Шаблон / уравнение для этого - 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. Тем не менее, для других часов переменная bacryLastHour не меняется, и поэтому возвращаемое ею число отключено. Мой код возвращает 50 для 2 часов (должно быть 90), 70 для 3 часов (должно быть 270), et c. Любой совет поможет, спасибо!

Изменить: невозможно изменить значения параметров

1 Ответ

0 голосов
/ 28 мая 2020

Это намного проще, чем вы себе представляете:

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) вернет правильное значение. Как только вы это узнаете, легко вернуть ответ для текущего значения часа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...