递归在数组中搜索字符(Java)

4

我被要求写一个函数,判断一个数组是否是另一个更大的数组的子集。我决定先从一个更简单的问题开始,编写一个能够确定字符是否存在于字符数组中的函数。

我想出了下面这段代码:

private static boolean findSequenceRecHelper(char [] findIn, char c, int index) {
    boolean result = false;
    if(index<findIn.length) {
        if(findIn[index] == c) {
            result = true;
        }
        else {
            findSequenceRecHelper(findIn,c,index+1);
        }
    }
    return result;
}

我已经进行了一些调试,发现该函数遍历整个char[]数组,当数组中的元素等于所需值时,result变为true。 但随后它再次变为false,实际上返回了错误的false
在这里我找不到错误 - 请有人帮我解决这个问题。
4个回答

5
在递归步骤中:
else
findSequenceRecHelper(findIn,c,index+1);

你应该返回递归调用的值。否则,什么也不会发生,而递归调用实际上是多余的。
private static boolean findSequenceRecHelper(char [] findIn, char c, int index)
{
boolean result = false;
if(index<findIn.length)
{
    if(findIn[index] == c)
        result = true;
    else
    return findSequenceRecHelper(findIn,c,index+1);
    //^ 
    //added return here
}
return result;
}

4
当你递归调用方法时,如果不存储其返回值,就会失去指示器,无法确定是否找到了字符。实际上,你需要将结果返回到当前递归调用上方的位置。尝试这个:
private static boolean findSequenceRecHelper(char [] findIn, char c, int index)
{
    boolean result = false;
    if(index<findIn.length)
    {
        if(findIn[index] == c)
            return true;
        else
            return findSequenceRecHelper(findIn,c,index+1);
    }
}

0

你并没有对递归调用做任何操作。相反,你需要将其返回值设置为 result,以便可以递归地返回它,例如,在你的 if 语句中使用 result = findSequenceRecHelper(findIn,c,index+1);


0

将此更改为:

if(index<findIn.length)
{
    if(findIn[index] == c)
        result = true;
    else
        return findSequenceRecHelper(findIn,c,index+1);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接