我正在尝试学习关于递归方法的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());
}
}
所以问题是(可能很多很简单)但我的应用程序如何知道何时停止?香港专业教育学院尝试使用简单的系统输出打印出来,但就我现在的理解而言,这种方法会在无限循环中将其称为自我?
希望有人有时间回应!答案 0 :(得分:3)
在任何递归程序中,当达到 base condition
时,您的迭代就会停止..这里您的基本条件是: -
if (root == null) {
return 0;
}
因此,当您的root.left
和root.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);