подсчет количества рекурсивных вызовов в java - PullRequest
0 голосов
/ 23 января 2020

Я написал фрагмент кода Java, чтобы найти целое число в списке целых чисел

    static int search(int x, List a) {
       if (a.isEmpty()) {

           throw new IllegalStateException("integer not in list");
       }
           if (x == a.getHead()) { 

           return x;
       }
       return search(x, a.getTail());
   }}

Но я хочу вместо того, чтобы возвращать значение X, я хочу вернуть его позиция в списке. Так, например, если в x = 5 и a = 1,2,3,4,7,5, то я хочу вернуть 6. Но я понятия не имею, как посчитать количество рекурсивных вызовов. Любые подсказки?

Ответы [ 3 ]

0 голосов
/ 23 января 2020

Как насчет использования yourList.indexOf(yourElement)

Вот ссылка на документацию: https://docs.oracle.com/javase/7/docs/api/java/util/List.html#indexOf (java .lang.Object)

Я надеюсь это помогает!

0 голосов
/ 23 января 2020

Поскольку вы хотите, чтобы это было основано на 1, а не на 0, вы можете вернуть 1 + search(x, a.getTail()) в рекурсивном вызове (таким образом, вы посчитаете, сколько раз вы вызываете метод, то есть текущий (1) плюс, рекурсивно, все остальные).

Тогда, когда вы найдете элемент, вы можете вернуть 0.

0 голосов
/ 23 января 2020

Одним из способов является добавление третьего параметра - count.

static int search(int x, List a, int count) {
    if (a.isEmpty()) {

       throw new IllegalStateException("integer not in list");
    }
       if (x == a.getHead()) { 

            return count;
       }
       return search(x, a.getTail(), count + 1); // incrementing the count here
    }
}

Чтобы вызвать его, либо введите 1, чтобы счетчик подсчитал количество совершенных вами вызовов до search или введите 0 для подсчета только рекурсивных вызовов.

...