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

时间:2012-06-06 12:17:13

标签: java recursion

我被要求写一些能确定数组是否是另一个更大数组的子集的东西。我决定从一个更简单的问题开始,编写一个函数来确定一个字符数组中是否存在一个字符。 我想出了这段代码:

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 个答案:

答案 0 :(得分:5)

在递归步骤中:

else
findSequenceRecHelper(findIn,c,index+1);

您应该return递归调用返回的值。否则 - 什么也没做,递归调用实际上是多余的。

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;
}

答案 1 :(得分:4)

当你以递归方式调用你的方法时,你不会存储它的返回值,实际上会丢失指示符,无论是否找到该字符。你真正想要做的是将结果 up 返回到当前的结果之上的递归调用。

试试这个:

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);
    }
}

答案 2 :(得分:0)

改变这个:

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

答案 3 :(得分:0)

你没有对你的递归电话做任何事情。相反,你将要设置它返回结果的内容,以便你可以递归地返回它,即。 result = findSequenceRecHelper(findIn,c,index+1);声明中的if