gpt4 book ai didi

Java继承与递归

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:58:13 28 4
gpt4 key购买 nike

我有一个父类(super class)和一个子类如下:

class Tree{
..
public void add(..){
//makes a call to protected function add(..)
}//for client to use.
protected TreeNode add(..){}//recursive function which calls itslef
}

class Stree extends Tree{
//overrides the recursive add function from class Tree
protected TreeNode add(..){
..
super.add();//calls the non-recursive add function in superclass.
}
}

这里的问题是,当我从子类中的新添加函数调用 super.add() 时,它会转到 Tree.add()。在 Tree.add() 中。有一个调用add(),它调用子类中的递归add函数而不是super,即Stree.add(),而不是Tree。 add() 导致无限循环。你们看出问题出在哪里了吗?

这是家庭作业,因此我无法更改递归函数的名称。我被明确要求向递归添加函数添加功能,而无需重写任何现有代码,这基本上意味着我将不得不调用原始的 add() 函数。

编辑:Tree.add()//递归的代码。请注意,我无法修改此代码来获得我寻求的功能。

protected StreeNode add(StreeNode node, String value) {
if (node == null) {
node = new StreeNode(value);
numElements++;
} else if (node.data.compareTo(value) == 0) {
// do nothing, String was already in Set
} else if (node.data.compareTo(value) > 0) {
node.left = add(node.left, value); // x = change(x)
} else {
node.right = add(node.right, value); // x = change(x)
}

return node;
}

编辑:既然我看到这是预期的行为,我该如何实现以下目标:

  1. 使用原始递归 add() 添加值
  2. 实现额外的功能

最佳答案

在没有看到参数的情况下,我假设 void add(...) 是向树中添加内容的方法,而 protected 递归方法查找要添加到的节点,然后执行添加.

我进一步假设公共(public)非递归方法将树的根作为开始参数传递给递归方法,而递归方法要么传递左子节点,要么传递右子节点,直到您碰到叶子。因此,调用非递归方法可能会一次又一次地从根开始。

因此我会说递归和继承的方法不应该调用非递归版本,而应该再次调用它自己。

关于Java继承与递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10357029/

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