Java Рекурсивная функция, которая определяет, есть ли два последовательных числа, которые равны - PullRequest
0 голосов
/ 25 апреля 2020

Я не совсем понимаю, как писать этот код рекурсивно. Я должен создать метод, который определяет, есть ли два последовательных числа, которые равны в указанном диапазоне c в массиве.

Пример массива, который должен возвращать true, будет: 3, 2, 2, 1, где i = 0 и j = 3.

Пока это мой код, но он делает неправильно решить проблему.

private static boolean problem1(int[] arr, int i, int j)
    {
        int[] newArray = Arrays.copyOfRange(arr, i, j+1); //Create a new array that only contains the specific given range

        for(int x = i; x < newArray.length; x++){ 
            int y = (x+1);
            if(newArray[x]==newArray[y]){
               return true;
            }
        }
        return false;
    }

Ответы [ 3 ]

0 голосов
/ 25 апреля 2020
private static boolean problem1(int[] arr, int i, int j) {
    if (arr == null || arr.length == 1 || arr.length == 0 || i == j) {
        return false;
    }

    if (arr[i] == arr[j])
        return true;

    i++;
    return problem1(arr, i, j);

}
0 голосов
/ 26 апреля 2020
private static boolean problem1(int[] A, int i, int j) {
    if (A == null || A.length == 1 || A.length == 0 || i == j) {
        return false;
    }

    if (A[i] == A[i + 1]) {
        return true;
    }
    i++;
    return problem1(A, i, j);

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

Найти объяснение рекурсивной функции в самом коде

import java.util.Arrays;
import java.util.Random;

public class RecurseFunc {

    public static void main(String[] args) {
//        int[] arr = new int[]{3,2,2,1};
        int[] arr = new int[]{3,2,4,1,1};
//        System.out.println(problem1(arr,0,3));
//        System.out.println(problemRec(arr, 4,-1,0));
        System.out.println(problemRecWrapper(new int[]{-1,2,4,1,0}, 4,  0));
    }

    static boolean  problemRecWrapper(int[] arr, int arrLastIndex, int currentIndex) {
        return problemRec(new int[]{-1,2,4,1,0}, 4, -1, 0);
    }

    /**
     *
     * @param arr      Complete array
     * @param arrLastIndex - Starting index point
     * @param lastIndex - Last element index
     * @param currentIndex - Current arr index
     * @return
     */
    static boolean  problemRec(int[] arr, int arrLastIndex, int lastIndex, int currentIndex) {
        if(currentIndex > arrLastIndex) {
            return false;
        }
        if(lastIndex > 0 && arr[lastIndex] == arr[currentIndex]) {
            return true;
        }
        currentIndex++;
        return problemRec(arr, arrLastIndex,lastIndex,currentIndex);

    }
}


...