java - 辅助方法中的递归 (Java)

标签 java recursion helpermethods

我正在练习递归并使用递归辅助方法。在我的帮助方法中,出现错误,指出

The method someMethod(K) in the type Tree is not applicable for the arguments (K, List, int).

但是,我不想使用 someMethod(K k)方法,因为我正在尝试使用 someMethod(K k, List<K> L, int n)辅助方法。如何让 Eclipse “知道”我正在尝试使用其他方法?

这是我迄今为止所拥有的:

public List<K> someMethod(K k) {
    List<K> L=new LinkedList<K>();
    if (lookup(k) != null) {
        return someMethod(k, L, 0);
    }
    return L;
}

private List<K> someMethod(K k, List<K> L, int n) {
    if (this.k.compareTo(k) == 0) {
        L.add(this.k);
        return list;
    }
    if (this.k.compareTo(k) < 0) {
        right.someMethod(k, L, n); //error here
        L.add(this.k);
    }
    if (this.k.compareTo(k) > 0) {
        left.someMethod(k, L, n); //error here
        L.add(this.k);
    }
}
<小时/>

编辑: 左、右声明:

private Tree<K, V> left, right;

最佳答案

我在第二种方法中看到的第一个问题是,您仅在语句时返回一些内容

if (this.k.compareTo(k) == 0)

是真的。

编译器应该给你一个错误,因为你的方法被声明为返回 List<K>

private List<K> someMethod(K k, List<K> L, int n)

要解决此问题,您应该在每个 if 中返回一些内容声明,或在方法的底部。根据您的逻辑,当没有匹配满足上述 if 时,您希望返回错误值声明被发现。因此,例如,您可以返回 null将此语句放在方法的底部:

return null;

或者,如果您不想处理 null值,返回一个空列表:

return new ArrayList<K>();

如果您进行此更改,您的代码可以在我的机器上正常编译。

这是一个 Ideone example根据我建议的更改可以很好地编译。

此外,正如 @ajb 在评论中提到的,您并没有真正考虑递归的基本情况。

意思是,你没有改变参数:

K k, List<K> L, int n 

当您通过递归传递它们时,您的递归方法将最终导致“无限”递归,导致 StackOverFlowError 在没有元素满足条件的情况下

if(this.k.compareTo(k) == 0) {
    L.add(this.k);
    return list;  // this returns from recursion but nothing else
}

您应该定义某种基本情况,无论您是否找到匹配项,该基本情况都会停止递归。

关于java - 辅助方法中的递归 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26769969/

相关文章:

带有通配符的 Java 泛型类型

python - 我如何证明和分析代码的运行时间,是 O(n) 吗?

c++ - 查找一棵树是否为单声道(所有元素都是唯一的)的函数?

java - 请为这段 Java 泛型代码建议帮助方法

java - 如何创建自定义 JavaFX 组件库?

java - 使用 java.time 将日期从 "06/25/2021 10:26:33.0"格式解析为 "2021-06-25T10:26:33.000-04:00"

java - Hive 无法初始化类 java.net.NetworkInterface

java - 计算平方根的二进制搜索 (Java)

java - 为什么需要一个辅助方法来递归搜索二叉搜索树?

ruby-on-rails - 如何将 ActiveRecord 对象作为参数传递给 Rails 中的辅助方法