我想知道递归方法中的基本条件。在我的讲座中,我看到我的老师有时会以各种方式写出基本条件。请看这个:
这里是公共方法的基本条件
<serviceBehaviors>
<behavior name="MessageListenerBehavior">
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
...
<services>
<service behaviorConfiguration="MessageListenerBehavior" name="... your service name...">
如果我在这样的私有方法中编写基本条件就可以了:
public E find(E x) {
if (x == null) {
return null;
}
return find(root,x);
}
private E find(BinaryNode<E> n, E x) {
if (n.element.equals(x)) {
return n.element;
}
else if (x.compareTo(n.element) < 0) {
return find(n.left, x);
}
else {
return find(n.right, x);
}
}
答案 0 :(得分:4)
好吧,我会选择以下版本:
public E find(E x) {
return find(root,x);
}
private E find(BinaryNode<E> n, E x) {
if (n == null) {
return null;
}
else if (n.element.equals(x)) {
return n.element;
}
else if (x.compareTo(n.element) < 0) {
return find(n.left, x);
}
else {
return find(n.right, x);
}
}
为什么呢?因为它是正确的。另一个不是,如果树中没有这样的元素,则会导致NullPointerException
。
OP帖子和评论中出现的第二个问题是,是否将基本条件置于public
或private
方法中。唯一可能的正确答案是每个递归方法必须具有一个基础条件,重复将结束。
public
方法可以被大家称为 ,因此他们应该验证输入。他们不能假设参数是有效的。 private
方法可以假设参数正常,可以专注于他们的逻辑。
我在公共方法中提出的条件是:
public E find(E x) {
if (<x isn't valid - for example null and nulls are not allowed for values>) {
//do something here - exception or null
}
return find(root,x);
}
它代表确保私有查找...的输入是正确的。这就是你必须做的事情。