【问题标题】:Recursion with return types返回类型的递归
【发布时间】:2019-07-06 23:23:28
【问题描述】:

如何理解复杂的递归?我只是找到初学者级别的递归示例。我想知道在涉及复杂逻辑时如何理解递归和调用堆栈。

 public Boolean recursion(int value, string name)
    {
        if (value > 10 && value<12)
            return false;

        if (value > 110)
            return false;

        if (value > 104 && value < 106)
            return false;
        return recursion(value+1,"left") || recursion(value+100,"right");
    }

或者更准确地说是以下逻辑

 public bool HasPathSum(TreeNode root, int sum) {
 if (root == null)
    return false;
if (root.val == sum && (root.left == null && root.right == null))
    return true;

return HasPathSum(root.left, sum - root.val)
        || HasPathSum(root.right, sum - root.val);
}

如何理解上述示例递归函数的流程?

【问题讨论】:

    标签: recursion binary-tree


    【解决方案1】:

    递归有点棘手,每次调用函数时都需要跟踪。在每次调用中,都会创建一个单独的堆栈。

    具体来说,对于第二个函数,它正在检查根到叶路径节点的总和是否等于特定值。存在 OR || 条件是因为路径可以在左子树或右子树中 - 如果任何一个满足它就是 true

    if (root.val == sum &amp;&amp; (root.left == null &amp;&amp; root.right == null)) 行检查直到您到达叶子,sum 是否等于 value。另请注意,value 被减少,然后用于递归调用,因为考虑了node 并考虑了它的值,所以从这个节点到叶子的其余节点的总和必须小于原始总和(减去当前节点的值)。

    【讨论】:

      猜你喜欢
      • 2013-02-26
      • 2014-04-17
      • 2018-04-22
      • 2014-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      相关资源
      最近更新 更多