2012-09-30 46 views
0

我想学习有关递归方法的技巧,并正在为我的二叉树编写一个方法来计算树中所有整数的总和我的代码工作正常,但除此之外,我仍然对应用程序如何知道何时停止。我的代码看起来像这样:递归方法为什么会停止?

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

}

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

希望有人有时间回应!

+8

提示:在什么情况下做你的'总和()'函数*不*自称? –

回答

3

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

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

所以,当您root.leftroot.right,在别人下面return声明同时阻断变空,你已经达到了base condition,因此你的循环停止..

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

漂亮其实很简单

走线从总和功能:

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

当你到达树的底部,root.left将是空的,所以将root.right。因此,当上述行调用总和(root.left)总和机能下降到如果声明的另一半:

return 0; 

因此,总和函数不再调用自身,所以停止递归

1

答案是,它不会进入无限循环,因为它不会递归地调用自己的条件。

的条件是

if (root == null) 

当它

return 0; 

,而不是再次调用本身

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