递归方法为什么会停止?

时间:2012-09-30 18:56:33

标签: java recursion

我正在尝试学习关于递归方法的abit,并且正在为我的二叉树编写一个方法,它计算树中所有整数的总和,我的代码工作得很好,但我仍然对应用程序如何知道停止。我的代码看起来像这样:

    public int sum(){

    return sum(overallRoot);
}

private int sum(IntTreeNode root) {
    if (root == null) {
        return 0;
    }else {
        return root.data + sum(root.left) + sum(root.right);
    }

}

(上面的代码来自我的nodeTree类)

下一个代码来自我的主要课程:

public class TreeClient {

/**
 * @param args
 */
public static void main(String[] args) {
    IntTree tree = new IntTree(12);
    System.out.println(tree.sum());
}

}

所以问题是(可能很多很简单)但我的应用程序如何知道何时停止?香港专业教育学院尝试使用简单的系统输出打印出来,但就我现在的理解而言,这种方法会在无限循环中将其称为自我?

希望有人有时间回应!

3 个答案:

答案 0 :(得分:3)

在任何递归程序中,当达到 base condition 时,您的迭代就会停止..这里您的基本条件是: -

if (root == null) {
    return 0;
}

因此,当您的root.leftroot.right,在else块中的以下return语句中都变为空时,您已到达base condition,因此您的循环停止..

return root.data + sum(root.left) + sum(root.right);

答案 1 :(得分:1)

非常简单

sum 函数中取出行:

return root.data + sum(root.left) + sum(root.right);

当你到达树的底部时, root.left 将为null, root.right 也是如此。因此,当上面的行调用 sum(root.left)时, sum 函数会进入 if 语句的另一半:

return 0;

因此, sum 函数不再调用自身,因此停止递归

答案 2 :(得分:1)

答案是它不会进入无限循环,因为当它不再递归地调用自身时会出现这种情况。

条件是

if (root == null)

什么时候

return 0;

而不是再次召唤自己

return root.data + sum(root.left) + sum(root.right);