gpt4 book ai didi

java - 递归方法中的基本条件

转载 作者:行者123 更新时间:2023-11-29 08:39:21 25 4
gpt4 key购买 nike

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

这里是公共(public)方法中的基本条件

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

如果我像这样在私有(private)方法中写基本条件可以吗:

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

最佳答案

好吧,我会选择以下版本:

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)方法的条件是:

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

它代表确保私有(private)查找...`的输入是正确的。这就是你必须做的。

关于java - 递归方法中的基本条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41486526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com