Java 数组查找法

Java 数组查找法,java,arrays,recursion,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 []

我需要理解递归的指导

以下是我所拥有的:

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循环不能达到这个目的,但是我想不出任何其他的方法来实现它。任何帮助都将不胜感激。

您的代码有两个问题:

  • 通过在循环的每次迭代中设置
    str
    ,即使您在
    i
    位置找到元素,当位置
    i+1
    中有不同的元素时,您也会用
    覆盖
    str
    ,有效地将
    str
    设置为该元素是否是数组中的最后一个元素。找到值后,尝试从循环中断开
    ,或在默认情况下将
    str
    初始化为
    “否”
    ,并仅在找到值时将其设置为
    “是”
  • 通过检查
    index==arr.length
    您并不是在测试从1到20的所有数字。您可以改为检查
    index>arr[arr.length-1]
    ,即检查它是否大于列表中的最后一个元素,但这仅在列表排序时有效
  • 这将修复您的代码。然而,老实说,我认为你对作业有点误解(尽管我不得不承认,开始的时候不是很清楚)。与使用递归测试后续数字(问题是您不知道何时停止)和使用循环测试数组的不同位置不同,我将使用相反的方法:使用循环测试您要测试的不同数字,并对数组中的不同位置使用递归

    这样,您可以将程序简化为以下内容(伪代码):

    函数成员(arr、num、index)->bool:
    如果索引不超过数组
    返回arr[index]等于num或member(arr,num,index+1)
    其他的
    返回错误
    arr={2,4,6,8,10,12,14,16,18,20}
    我从1岁到20岁
    打印i,成员(arr,i,0)
    
    您的代码有两个问题:

  • 通过在循环的每次迭代中设置
    str
    ,即使您在
    i
    位置找到元素,当位置
    i+1
    中有不同的元素时,您也会用
    覆盖
    str
    ,有效地将
    str
    设置为该元素是否是数组中的最后一个元素。找到值后,尝试从循环中断开
    ,或在默认情况下将
    str
    初始化为
    “否”
    ,并仅在找到值时将其设置为
    “是”
  • 通过检查
    index==arr.length
    您并不是在测试从1到20的所有数字。您可以改为检查
    index>arr[arr.length-1]
    ,即检查它是否大于列表中的最后一个元素,但这仅在列表排序时有效
  • 这将修复您的代码。然而,老实说,我认为你对作业有点误解(尽管我不得不承认,开始的时候不是很清楚)。与使用递归测试后续数字(问题是您不知道何时停止)和使用循环测试数组的不同位置不同,我将使用相反的方法:使用循环测试您要测试的不同数字,并对数组中的不同位置使用递归

    这样,您可以将程序简化为以下内容(伪代码):

    函数成员(arr、num、index)->bool:
    如果索引不超过数组
    返回arr[index]等于num或member(arr,num,index+1)
    其他的
    返回错误
    arr={2,4,6,8,10,12,14,16,18,20}
    我从1岁到20岁
    打印i,成员(arr,i,0)
    
    您的代码有两个问题:

  • 通过在循环的每次迭代中设置
    str
    ,即使您在
    i
    位置找到元素,当位置
    i+1
    中有不同的元素时,您也会用
    覆盖
    str
    ,有效地将
    str
    设置为该元素是否是数组中的最后一个元素。找到值后,尝试从循环中断开
    ,或在默认情况下将
    str
    初始化为
    “否”
    ,并仅在找到值时将其设置为
    “是”
  • 通过检查
    index==arr.length
    您并不是在测试从1到20的所有数字。您可以改为检查
    index>arr[arr.length-1]
    ,即检查它是否大于列表中的最后一个元素,但这仅在列表排序时有效
  • 这将修复您的代码。然而,老实说,我认为你对作业有点误解(尽管我不得不承认,开始的时候不是很清楚)。与使用递归测试后续数字(问题是您不知道何时停止)和使用循环测试数组的不同位置不同,我将使用相反的方法:使用循环测试您要测试的不同数字,并对数组中的不同位置使用递归

    这样,您可以将程序简化为以下内容(伪代码):

    函数成员(arr、num、index)->bool:
    如果索引不超过数组
    返回arr[index]等于num或member(arr,num,index+1)
    其他的
    返回错误
    arr={2,4,6,8,10,12,14,16,18,20}
    我从1岁到20岁
    打印i,成员(arr,i,0)
    
    您的代码有两个问题:

  • 通过在循环的每次迭代中设置
    str
    ,即使您在
    i
    位置找到元素,当位置
    i+1
    中有不同的元素时,您也会用
    覆盖
    str
    ,有效地将
    str
    设置为该元素是否是数组中的最后一个元素。找到值后,尝试从循环中断开
    ,或在默认情况下将
    str
    初始化为
    “否”
    ,并仅在找到值时将其设置为
    “是”
  • 支票