我对 Java 有点陌生,我正在学习递归的概念。我正在创建一个递归算法,该算法使用 compareTo 方法检查某个元素是否存在于 Comparable 数组中。尽管该算法在大多数情况下都有效,但出于某种原因,它似乎在后半部分找不到元素。例如数组为{3, 5, 1, 9, 11},在3, 5, 1上调用方法成功返回true,但在9, 11上调用方法返回false。附上代码,如有帮助将不胜感激!
@SuppressWarnings ("unchecked")
public boolean searchItem (Comparable[] arr, Comparable searchValue)
{
if (arr.length == 1 && arr[0].compareTo (searchValue) == 0)
return true;
else if (arr.length == 1)
return false;
return arr[0].compareTo (searchValue) == 0 || searchItem (Arrays.copyOfRange (arr, 1, arr.length - 1), searchValue);
}
最佳答案
copyOfRange
的第三个参数是不包括元素的 copyTo 索引 - 即,不复制 copyTo 索引处的元素。所以你需要 arr.length 而不是 arr.length - 1
https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#copyOfRange(boolean[],%20int,%20int)
from - the initial index of the range to be copied, **inclusive**
to - the final index of the range to be copied, **exclusive**.
(This index may lie outside the array.)
所以你需要 searchItem (Arrays.copyOfRange (arr, 1, arr.length), searchValue)
这是一个更简单的递归程序
if(arr.length == 0)
return false;
if(arr[0].compareTo(searchValue) == 0)
return true;
return searchItem(Arrays.copyOfRange(arr, 1, arr.length), searchValue);
关于java - 为什么这种搜索算法奇怪地不适用于这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55671513/