2015-10-26 4 views
0

пытается написать функцию, которая находит последнее вхождение мишени в векторе, изменяя линейную функцию поиска ...Java: Назад Рекурсивный Линейный поиск

private int linearSearchRecursive(int[] input, int key,int index) { 
    if (index == 0) { 
     return -1; 
    } 
    if (input[index] == key) { 
     return index; 
    } 
    else 
    return linearSearchRecursive(input,key,--index); 
} 

Я придумал способ, чтобы заставить его работать с помощью вспомогательной функции ...

public static int findLastOccurance(int[] items, int key){ 
    return linearSearchRecursive(items, key, items.length - 1); 
} 

Или что-то в этом роде, но было интересно, если есть более простой способ, где я мог бы использовать только одну функцию, но сохранить рекурсивность?

+1

Если вы собираетесь оценивать каждую запись, начиная с конца, я не понимаю, почему вы заморачиваться с рекурсии в первую очередь. Это довольно итеративный подход, и рекурсия не приносит ничего, кроме накладных расходов и путаницы в этом конкретном случае. – Joffrey

+0

@ Joffrey Я не мог согласиться больше, его часть обзора для теста, который я придумал, поэтому я пытаюсь понять это в мысли, что что-то подобное может появиться на тесте. – Bob

ответ

2

Не проще, но только одна функция:

public class Test { 

public static int findLastOccuranceRecursive(int[] input, int key, int... optionalIndex) { 
    if (optionalIndex.length == 0) { 
     optionalIndex = new int[] { input.length - 1 }; 
    } else if (optionalIndex.length != 1) { 
     throw new IllegalArgumentException("size of optionalIndex must be 0 or 1"); 
    } 

    if (optionalIndex[0] == 0) { 
     return -1; 
    } 
    if (input[optionalIndex[0]] == key) { 
     return optionalIndex[0]; 
    } else { 
     optionalIndex[0]--; 
     return findLastOccuranceRecursive(input, key, optionalIndex); 
    } 
} 

public static int findLastOccuranceIterative(int[] items, int key) { 
    for (int i = items.length - 1; i >= 0; i--) { 
     if (items[i] == key) { 
      return i; 
     } 
    } 
    return -1; 
} 

public static void main(String[] args) { 
    int[] input = { 1, 1, 1, 2, 1, 2, 1, 1 }; 
    int testRecursive = findLastOccuranceRecursive(input, 2); 
    int testIterative = findLastOccuranceIterative(input, 2); 
    System.out.println("testRecursive: " + testRecursive + " testIterative: " + testIterative); 
} 
} 
Смежные вопросы