我需要理解递归的指导。
这是我所拥有的:
public class ArrayMember
{
public static void main(String[] args)
{
int index = 0;
int [] arr = {1, 5, 6, 2};
System.out.println(member(arr, index));
}
public static String member(int [] arr, int index)
{
if(index == arr.length)
return str;
str = index + "\t" + str + "\n";
return str + member(arr, index+1);
}
}
如您所见,这永远不会一直达到 20 并且始终打印“No”。我很确定 for 循环达不到目的,但我想不出任何其他方法来做到这一点。任何帮助将不胜感激。
最佳答案
您的代码有两个问题:
- 通过在循环的每次迭代中设置
str
,即使您在位置i
中找到元素,您也会用覆盖
当位置str
>“No”i+1
中有不同的元素时,有效地将str
设置为该元素是否是数组中的最后一个元素。找到值后尝试中断
循环,或者默认将str
初始化为“No”
并且仅将其设置为如果你找到了,"is"
。 - 通过检查
index == arr.length
您并没有测试从 1 到 20 的所有数字。您可以检查index > arr[arr.length-1]
code>,即检查它是否大于列表中的最后一个元素,但这仅在列表已排序的情况下才有效。
这应该可以修复您的代码。然而,说实话,我认为你有点误解了作业(尽管我不得不承认一开始还不是很清楚)。我不会使用递归来测试后续数字(问题是您不知道何时停止),也不会使用循环来测试数组的不同位置,而是将其反转:使用循环来测试不同的数字您想要测试,并对数组中的不同位置使用递归。
这样,您就可以将程序简化为这样(伪代码):
function member(arr, num, index) -> bool :
if index does not exceed array
return arr[index] equals num or member(arr, num, index+1)
else
return false
arr = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20}
for i from 1 to 20
print i, member(arr, i, 0)
关于java - 在数组方法中查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25694669/