向后递归线性搜索
Posted
技术标签:
【中文标题】向后递归线性搜索【英文标题】:Backward Recursive Linear Search 【发布时间】:2015-10-26 22:52:19 【问题描述】:我正在尝试编写一个函数,通过修改线性搜索函数来查找向量中目标的最后一次出现。
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);
或类似性质的东西,但想知道是否有更简单的方法可以只使用一个函数但保持递归性?
【问题讨论】:
如果您要从最后开始评估每个条目,我不明白您为什么首先要为递归而烦恼。这是一种非常迭代的方法,在这种特定情况下,递归只会带来开销和混乱。 @Joffrey 我完全同意,但它是我即将提出的测试审查的一部分,所以我试图弄清楚类似的事情可能会出现在测试中。 【参考方案1】:并不简单,但只有一个功能:
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);
【讨论】:
以上是关于向后递归线性搜索的主要内容,如果未能解决你的问题,请参考以下文章