gpt4 book ai didi

java - 可以在递归方法中编写基本条件的地方

转载 作者:行者123 更新时间:2023-12-01 16:53:26 25 4
gpt4 key购买 nike

我正在阅读有关java中的递归方法...我不理解递归方法的基本条件...这里有两个例子

public int weight() {
return weight(root);
}
/ * Returns the weight of the tree where n is the root. * /
private int weight(Node n) {
if (n == null) {
return 0;
} else if (n.left == null) { // då är n.right också null
return n.data;
} else {
return weight(n.left) + weight(n.right);
}
}
<小时/>
public boolean isMobile() {
if (root == null) {
return true;
} else {
return isMobile(root);
}
}
/ * Returns true if the tree where n is the root of a mobile. * /
private boolean isMobile(Node n) {
if (n.left == null) { // då är n.right också null
return true;
} else {
return isMobile(n.left) && isMobile(n.right) &&
weight(n.left) == weight(n.right);
}
}
<小时/>

我想知道:在weight()方法中我们为什么不这样做:

public int weight() {
if (root == null) {
return 0;
} else {
return weight(root);
}
}

正如您所看到的,isMobile() 方法中的基本条件直接位于其下方,但weight() 方法中的基本条件位于私有(private)方法下..何时可以直接在其下或在单独的私有(private)方法中编写递归的基本条件?

谢谢

编辑:

public int weight() {
if (root == null) {
return 0;
} else {
return weight(root);
}
}

private int weight(Node n) {
if (n == null) {
return 0;
} else if (n.left == null) { // då är n.right också null
return n.data;
} else {
return weight(n.left) + weight(n.right);
}
}

最佳答案

in the weight() method why do not we do like this : [...]

简单的答案是因为该方法的无参数 weight() 重载不是递归的,即使它依赖于以 Node 作为参数的递归实现。基本条件必须位于递归方法本身中,因为这是必须做出停止调用自身的决定的地方。

尽管是同名的重载,但您的两个权重方法可以像这样一起工作:

public int nonRecursiveWeight() {
return recursiveWeight(root);
}
private int recursiveWeight(Node n) {
...
}

nonRecursiveWeight 为递归实现 recursiveWeight 提供了一个很好的公共(public)“前台”,向 API 用户隐藏了节点。

isMobile 方法对遵循相同的安排:您有一个递归实现和一个共享相同名称的非递归“前面”。

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

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