我对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);
}
答案 0 :(得分:3)
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);