Проблемы с рекурсией в Java - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь решить проблемы рекурсии в Java, но я застрял с этим. Я позволю проблемы здесь и что я сделал. Спасибо за помощь: D

Обнаружен новый тип вируса, и компания попросила нас запрограммировать формулу, которая позволит нам определить прирост населения вируса в определенное время. Первоначально, в момент времени 0 (ч) у нас 32 вируса, и каждый час число вирусов удваивается. Кроме того, каждый час добавляется фиксированное количество вирусов (num).

a) Выполните рекурсивную функцию, которая рассчитывает общее количество вирусов, переданных за час, и фиксированное число для данного вируса.

b) Рассчитайте количество вирусов, которые будут у нас в часы 0, 1 и 2 с фиксированным числом 10.

ЭТО ТО, ЧТО Я СДЕЛАЛ:

public static void main (String [] Args) {
    Scanner in = new Scanner(System.in);
    int h, v, f, result;
    f = 10;
    v = 32;
    System.out.println("Hours: ");
    h = in.nextInt();
   result =  TotalVirus (h, v, f);
    System.out.println("Total : " + result);
}

public static int TotalVirus (int h, int v, int f) {
    int counter = 1, result;

    if ( counter == h) {
        return 1;
    }
    else {
      counter = counter + 1;
      v = v + 32 + f;
      result = TotalVirus(h,v,f);  

    }
    return result;

}

}

Я действительно не знаю, что написать в операторе if, чтобы завершить рекурсию.

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Все, что вам нужно, это хвостовая рекурсивная функция, как показано ниже:

public static int totalVirus (int h, int v, int f) {

    if ( h == 0 ) {
      return v;
    } 
    return totalVirus( h-1, 2*v + f, f );


}

Итак, вы начинаете с часа, скажем h = 2, а затем уменьшаете его в каждом вызове. При уменьшении вы добавляете 2*v + f, потому что каждый час вирусы удваиваются, и также добавляется фиксированное количество. Когда время достигает 0, вы просто возвращаете существующее количество вирусов.

0 голосов
/ 21 апреля 2020

Сделайте это следующим образом:

import java.util.Scanner;

public class Main {
    public static void main(String[] Args) {
        Scanner in = new Scanner(System.in);
        int h, v, f, result;
        f = 10;
        v = 32;
        System.out.println("Hours: ");
        h = in.nextInt();
        result = TotalVirus(h, v, f);
        System.out.println("Total : " + result);
    }

    public static int TotalVirus(int h, int v, int f) {
        if (h == 0) {
            return v;
        }
        return TotalVirus(h - 1, 2 * v + f, f);
    }
}

Пробный прогон:

Hours: 
0
Total : 32

Другой пробный прогон:

Hours: 
1
Total : 74

Еще один пример прогона:

Hours: 
2
Total : 158
...