递归方法中的基本条件

时间:2017-01-05 13:37:39

标签: java

我想知道递归方法中的基本条件。在我的讲座中,我看到我的老师有时会以各种方式写出基本条件。请看这个:

这里是公共方法的基本条件

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

1 个答案:

答案 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帖子和评论中出现的第二个问题是,是否将基本条件置于publicprivate方法中。唯一可能的正确答案是每个递归方法必须具有一个基础条件,重复将结束。

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

它代表确保私有查找...的输入是正确的。这就是你必须做的事情。