Java:在达到false时中断递归

时间:2016-11-25 10:57:52

标签: java recursion return

我正在编写一个程序,以递归方式在字符串中搜索字母A,T,C或G.使用Pattern和Matcher将字符串的第一个字母与正则表达式进行比较。如果第一个字母匹配,则会再次调用递归函数,但会剪切已匹配的第一个字母。

示例中的ATTAFCG之类的序列应该立即返回false并在其到达F后停止检查其余部分,但我发现它确实停在那里但返回仍然是真值。我的控制台输出是:

Value to return: true Where the letter is: A
Value to return: true Where the letter is: T
Value to return: true Where the letter is: T
Value to return: true Where the letter is: A
Status: true

即使在m.find()返回false后强制返回false,最终返回值仍为true。我究竟做错了什么 ?是否在到达错误的字母时递归返回并最后使用第一个字母的值(true)?以下是使用过的代码:

public static void main(String[] args) {
    String sequence = "ATTAFCG";
    boolean found = recursive(sequence);
    System.out.println("Status: " + found);
}

public static boolean recursive(String input) {
    boolean returnValue = true;
    String pattern = "^[ATGC]*$";
    Pattern r = Pattern.compile(pattern);
    String[] list = input.split("");
    Matcher m = r.matcher(list[0]);

    if (input.length() > 1) {
        if (m.find() == true) {
            recursive(input.substring(1));
        } else if (m.find() == false) {
            returnValue = false;
            return returnValue;
        }
    } else if (m.find() == true) {
        returnValue = true;
    } else if (m.find() == false) {
        returnValue = false;
        return returnValue;
    }
    System.out.println("Value to return: " + returnValue + " Where the letter is: " + list[0]);
    return returnValue;
}

1 个答案:

答案 0 :(得分:0)

试试:

//...
    if (input.length() > 1) {
            if (m.find() == true) {
                returnValue = recursive(input.substring(1));
            } else if (m.find() == false) {
                returnValue = false;
                return returnValue;
            }
//...

问题是,一旦递归调用该方法,就不要将returnValue设置为其结果(您应该这样做)

另外我宁愿翻转代码中的逻辑,我认为将布尔值初始化为true

并不好