java - 在数组方法中查找

标签 java arrays recursion

我需要理解递归的指导。

这是我所拥有的:

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 循环达不到目的,但我想不出任何其他方法来做到这一点。任何帮助将不胜感激。

最佳答案

您的代码有两个问题:

  1. 通过在循环的每次迭代中设置 str,即使您在位置 i 中找到元素,您也会用 覆盖 str >“No” 当位置 i+1 中有不同的元素时,有效地将 str 设置为该元素是否是数组中的最后一个元素。找到值后尝试中断循环,或者默认将str初始化为“No”并且仅将其设置为如果你找到了,"is"
  2. 通过检查 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/

相关文章:

java - 如何获取执行jar的绝对路径?

java - 在没有 youtube 应用程序的情况下将 Youtube 视频集成到应用程序中

arrays - 为什么在 Swift 中创建数组时出现错误?

java - 从列表中过滤对象

java - Spring XD - 模块 "source:trigger"无法按预期工作

iOS swift : Array of Range

C++ 不需要返回值

java - 递归函数——保存ArrayList Java

python - 处理超过最大递归深度

C# 扁平化 json 结构