请提供理解递归的指导

时间:2019-04-27 20:26:02

标签: java recursion

public static int countX(String str) {
    if (str.length() == 0) {
        return 0;
    }
    if (str.charAt(0) == 'x') {
        return 1 + countX(str.substring(1));
    } else {
        return countX(str.substring(1));
    }
}

给出输入字符串“ xxx”,上述方法应返回3。 我了解该方法的流程,如果找到'x',则“ return 1 + countX(str.substring(1));” 行加一个。我不明白的是,该返回值如何延续到下一次迭代/递归中?我看不到增量的值存储在任何地方。

1 个答案:

答案 0 :(得分:1)

查看第return 1 + countX(str.substring(1));行 现在假设str为“ xx”,因此传递给递归调用的子字符串为“ x”。 因此,在该调用中,由于第一个字符为“ x”,因此它将再次执行

return 1 + countX(str.substring(1));

在下一个递归调用中,子字符串为空,因此它对上一个调用返回零,然后对前一个调用返回(1 + 0),对上一个调用返回(1 +(1 +0))调用该方法,因此字符串“ xx”的结果变为1 + 1 + 0 =2。