我需要指导理解递归。
这就是我所拥有的:
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并始终打印“否”。而且我很确定有一个for循环会破坏目的,但我想不出有任何其他方法可以做到这一点。任何帮助将不胜感激。
答案 0 :(得分:3)
您的代码存在两个问题:
str
,即使您找到位置i
的元素,当有不同的元素时,也会使用str
覆盖"No"
在位置i+1
中,有效地将str
设置为元素是否是数组中的最后一个元素。找到值后尝试从循环中break
,或默认情况下将str
初始化为"No"
,如果找到则仅将其设置为"Yes"
。index == arr.length
您没有测试从1到20的所有数字。您可以检查是否index > arr[arr.length-1]
,即检查它是否大于列表中的最后一个元素,但这只会如果列表已排序,则工作。这应该修复你的代码。但是,老实说我觉得你误解了这个任务(虽然我不得不承认,开始时并不是很清楚)。而不是使用递归来测试后续数字(问题是你真的不知道何时停止),并使用循环来测试数组的不同位置,我会反过来:使用循环来测试不同的数字你想测试,并使用递归数组中的不同位置。
这样,您可以将程序简化为此(伪代码):
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)