当前位置: 首页 > 知识库问答 >
问题:

递归函数return错误地返回false

岑鸣
2023-03-14

我目前正在编码一个二叉查找树,目前正在尝试实现一个递归函数来确定二叉树中是否存在一个节点。

这是节点类:

public class BSTNode
{
  public String data; // use this for data and key
  public BSTNode parent, leftchild, rightchild;

  public BSTNode(String key)
  {
      this.data = key;
  }

  public Boolean Exists(String search)
  {
    if(data.equals(search))
        return true;
    else
    {
        if (search.compareToIgnoreCase(data) < 0 && leftchild != null)
        {
            leftchild.Exists(search);
        }
        else if (search.compareToIgnoreCase(data) > 0 && rightchild != null)
        {
            rightchild.Exists(search);
        }       
    }
    return false;
 }



  public void Insert(String key)
  {
    if(key.compareToIgnoreCase(data) < 0)
    {
        if(leftchild == null)
            leftchild = new BSTNode(key);
        else
            leftchild.Insert(key);
    }
    else
    {
        if(rightchild == null)
            rightchild = new BSTNode(key);
        else
            rightchild.Insert(key);
    }
  }

}

所讨论的函数是Exists函数。这是在BST的根节点上调用的,就像这样:root。存在(“价值”)

当最终满足节点时,Exists函数的基本情况会正确执行,但是返回false 语句是在返回堆栈未打算时执行的。我似乎无法更改函数以删除返回false 语句。


共有1个答案

符风畔
2023-03-14

您忘记使用递归调用返回的值:

  public Boolean Exists(String search)
  {
    if(data.equals(search))
        return true;
    else
    {
        if (search.compareToIgnoreCase(data) < 0 && leftchild != null)
        {
            return leftchild.Exists(search);
        }
        else if (search.compareToIgnoreCase(data) > 0 && rightchild != null)
        {
            return rightchild.Exists(search);
        }       
    }
    return false;
 }
 类似资料:
  • 我有一个递归函数,它会重复这个函数,直到不满足if条件,然后输出一个整数。但是,此函数之外需要整数的函数正在接收一个单位。我应该如何修改代码以返回int? 这就是整个程序 }

  • 我正在编写一个递归函数,如下所示: 此函数用于接收员工并查找其管理者。如果找到管理器,则将管理器id推送到数组中($)- 所以我的问题是,如果我不在第6行返回递归调用(这是-

  • 我在构建递归函数时继续遇到一个问题,其中返回的值与我期望返回的值不同。我很确定这与函数的递归性质有关,但我不知道发生了什么。 在这个缩小的例子中,我有一个带有字符串的函数foo和一个默认值为0的int。给定字符串“测试”并且没有整数,我希望递归函数为每个调用增加numberToBack并将新值传递给下一个调用。这一定是部分正确的,因为如果我在到达基本情况时cout numberToBack,我将获

  • 问题内容: 我有一个计算税金的函数。 我不明白为什么它不能停止递归。 问题答案: 在您的职能部门中: 您没有从函数或设置中返回值。当您不返回任何内容时,返回值为。 也许,您想要这样:

  • 到目前为止,我们创建的函数都只是对传入的数据进行了处理,处理完了就结束。但实际上,在某些场景中,我们还需函数将处理的结果反馈回来,就好像主管向下级员工下达命令,让其去打印文件,员工打印好文件后并没有完成任务,还需要将文件交给主管。 Python中,用 def 语句创建函数时,可以用 return 语句指定应该返回的值,该返回值可以是任意类型。需要注意的是,return 语句在同一函数中可以出现多次

  • 问题内容: 我编写了以下函数,以实现自己的二进制搜索 我知道我的实现已经关闭,但是我对理解递归堆栈更加好奇。 当我调用时,我的函数应返回的值 但相反,它返回None。此外,当我直接调用时 ,我得到的正确值为0。这怎么可能? 问题答案: 您将忽略递归调用的返回值。您还需要 显式地 返回它们: 递归调用与其他任何函数调用一样;他们将结果返回给调用者。如果忽略返回值,然后调用函数结束,那么您将以该调用函