【问题标题】:using recursion to add to a variable使用递归添加到变量
【发布时间】:2016-05-31 06:42:59
【问题描述】:

下面的代码是使用私有方法来添加变量计数。在该变量下方是条件,据我了解,在递归堆栈跟踪 upword 之前不会运行。我对么?我的测试失败了,我正在尝试查看是因为我的代码错误还是我使用的递归错误。

public boolean containsRightRedEdge() {
    int count = 0;
    count += containsRightRedEdge(root);
    if(count > 0) return true;
    return false;
}

private int containsRightRedEdge(Node n) {
   if (n == null) return 0;
   if (isRed(n.right)) {
       return 1;
   }
   return containsRightRedEdge(n.left) + 0 + containsRightRedEdge(n.right);         
}

【问题讨论】:

  • 应该return containsRightRedEdge(n.left) + 0 + containsRightRedEdge(n.left);return containsRightRedEdge(n.left) + 0 + containsRightRedEdge(n.right); 吗?
  • 另外,您的测试是如何失败的?你的输入是什么?你的预期输出是什么?你观察到的输出是什么?
  • @Turing85 这不是我的测试,它的教授只说通过或失败。我真正担心的是,如果我在这种情况下正确使用递归。如果是,我会编写自己的测试来查看问题所在。我想确保在我这样做之前正确使用递归
  • @JoshuaSnider 是的,应该是,谢谢。立即做出改变。
  • @ChristopherJakob:这能解决问题还是只是你的问题中的一个错字?

标签: java recursion red-black-tree


【解决方案1】:

我会说您非常正确地使用了递归,但是您选择的方法名称可能不会那么混乱,并且您的逻辑可以简化。 我对您尝试实现的算法不太熟悉,但您可以尝试以下方法:

public boolean containsRightRedEdge(Node root) {
   return getNumRightRedEdges(root) > 0;
}

private int getNumRightRedEdges(Node n) {
   if (n == null) return 0;
   if (isRedEdge(n)) return 1;

   return getNumRightRedEdges(n.left) + getNumRightRedEdges(n.right);
}

一般来说,递归方法不应与非递归方法同名。这些方法名称更清楚地传达了每个方法的作用。此外,您的基本案例可能是错误的,因为您目前已经根据我对算法应该如何工作的解释来编写它们。当然,我不知道isRed() 里面的代码,所以我可能在这里做出了错误的假设。

【讨论】:

  • 感谢@Sean Glover,我在这里学到了一些东西。非常干净的代码。
【解决方案2】:

我问题中的上述代码是在这种情况下使用递归的正确方法。我只是有一个错字,现在已经解决了。留下问题供其他人参考。

【讨论】:

    猜你喜欢
    • 2016-02-27
    • 2020-05-28
    • 2016-06-09
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    相关资源
    最近更新 更多