Java code recursive and iterative methods have different answers

72 Views Asked by At

I'm starting to lose hope and sanity... I'm learning Java code and trying to write a program for choosing hobby, but it must be done by two methods and mine give different numbers... I don't know where to look for mistake or how to make it right. Please help!

 public static int chooseHobbyRecursive(int[] startNumbers, int day) {
    if (day == 0){
        return startNumbers [0];
    } else if (day == 1) {
        return startNumbers [1];
    } else if (day == 2) {
        return startNumbers [2];
    } else if (day == 3) {
        return startNumbers [3];
    } else {
        int prev = chooseHobbyRecursive(startNumbers, day - 1);
        int prevPrePrev = chooseHobbyRecursive(startNumbers, day - 3);
        return (prev * prevPrePrev) % 10 + 1;
    }
    }
   

    public static int chooseHobbyIterative(int[] startNumbers, int day) {
        List<Integer> numbers = new ArrayList<>();

        numbers.add(startNumbers[0]);
        numbers.add(startNumbers[1]);
        numbers.add(startNumbers[2]);
        numbers.add(startNumbers[3]);

        for (int d = 0; d < day; d++) {
            int index = d + 4; 
            int prev = numbers.get(index - 1); 
            int prePrePrev = numbers.get(index - 3); 
            numbers.add((prev * prePrePrev) % 10 + 1);
        }

        return numbers.get(numbers.size() - 1);
    }
}

I've been trying to rewrite the code but it usually either dies with ArrayIndexOutOfBoundsException or have different numbers

Output:

=== Day 1 ===
Iterative = 4 | Recursive = 1

=== Day 2 ===
Iterative = 1 | Recursive = 20

=== Day 5 ===
Iterative = 8 | Recursive = 1

=== Day 15 ===
Iterative = 2 | Recursive = 3

UPD: The task states: At the very beginning student writes two numbers: the day and month of his birth, then two numbers - two halves of the current year. For example, if he was born on January 21 and the year is 2023, the first four numbers are 21 1 20 23. Each next number is obtained by the rule: the previous day and two days before it are taken, multiplied, the remainder of the division by 10 is taken, then 1 is added, so that there is numbering from one. Each such number will be from 1 to 10 and will be the number of the hobby he will be doing that day.

I was given the iterative method and my job to create a recursive one, but I don't understand how (I figured how to make a recursive part), but somehow have no idea how to make the method chooseHobbyRecursive right.

I would appreciate the explanation or/and the parts where I'm wrong or any advice really. Thanks!

0

There are 0 best solutions below