Оператор возврата не завершает метод java

public class Interpolation_search {

    public static void main(String...s) {
        int rr[]= {1,2,3,4,9,10,15,80};
        System.out.println(search(rr,0,7,3));
    }

    static int search(int ar[], int lo, int hi,int X) {

        if (lo<hi&&ar[lo]!=ar[hi]) {
            int mid=lo + ((hi-lo)/(ar[hi]-ar[lo]))*(X-ar[lo]);
            if (X==ar[mid])
                return 1;      //l1
            else if (X>ar[mid])
                search(ar,mid+1,hi,X);
            else search(ar,lo,mid-1,X);
        }
        return 0;              //l2
    }
}

return выполняется дважды: сначала на l1, а затем на l2.

Вы рекурсивно вызываете метод search(), поэтому он выполняется несколько раз. При необходимости используйте пошаговый отладчик для визуализации процесса. Также обратите внимание, что вам, вероятно, следует вернуть результат этих рекурсивных вызовов или вообще что-то с ними сделать.

Aaron 17.08.2018 14:24

Если вы вызов несколько раз (что вы делаете), он будет возвращение несколько раз.

khelwood 17.08.2018 14:33

Не связано: пожалуйста, избегайте имен собственных. Переменные не должны быть сокращениями, они всегда идут в нижнем регистре. И они должны что-то значить. Итак, valueToFind вместо X, и values вместо ar, и «testValues» вместо rr.

GhostCat 17.08.2018 14:36

Я ценю быстрое возвращение!

GhostCat 17.08.2018 16:20
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
4
119
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, у вас возникли трудности с пониманием рекурсии.

Ваш метод search() должен возвращать результат типа int. А сам метод многократно вызывает сам (используя разные аргументы). Дело в том, что вы все игнорирование этих рекурсивных вызовов.

Другими словами: настоящий ответ для вас - сделать шаг назад и понять, что такое рекурсия, как имел ввиду, и как его правильно использовать. Для начала вы можете попробовать изменить

search(ar,mid+1,hi,X);

к

return search(ar,mid+1,hi,X);

Другие вопросы по теме