在递归函数的每个阶段,变量会发生什么变化?

时间:2017-09-13 15:14:27

标签: algorithm recursion

    public static int findHeight(Tree root) {
    int leftHeight, rightHeight;

    if (root == null) {
        return 0;
    }

    leftHeight = 1 + findHeight(root.left);
    rightHeight = 1 + findHeight(root.right);

    return leftHeight > rightHeight ? leftHeight : rightHeight;
}

我的困惑在于变量leftHeight和rightHeight。这行上的递归调用究竟添加了什么?

 leftHeight = 1 + findHeight(root.left);

findHeight(root.left)在那时没有返回任何值,那么会在那里添加什么?或者它是否为每个递归调用总结了leftHeight?如果是这样,那怎么办?

1 个答案:

答案 0 :(得分:0)

我总是建议在编码时用纸和笔坐着,这有助于放下你的逻辑。

对于上面的代码段,让我们考虑如下示例: -

     3
   /   \
  2     4
 /
1

现在,当对此树的调用看起来像

-> findHeight(3) -> findHeight(2) -> findHeight(1)
               \-> findHeight(4)

Now have a clear look, 
findHeight(1) will return 1;
findHeight(2) will return 1 + findHeight(1) = 2
findHeight(4) will return 1 + 0 (NULL) = 1
findHeight(3) will return 1 + max(2,1) = 3

希望这有助于您了解递归流程。