1

我有一个函数可以计算小于二叉搜索树中项目的数字。它工作正常。但我只是不明白为什么局部变量计数可以记住总数,因为每次递归调用,它都会重置为 0。

def count_less(self, item):
    """(BST, object) -> int
    Return the number of items in BST that  less than item.
    """
    return BST.count_less_helper(self.root, item)

# Recursive helper function for count_less. 
def count_less_helper(root, item):
    count = 0
    if root:
        if root.item < item:
            count += 1
            count += BST.count_less_helper(root.left, item)
            count += BST.count_less_helper(root.right, item)
        elif root.item > item:
            count += BST.count_less_helper(root.left, item)
    return count
4

3 回答 3

0

为什么局部变量count可以记住总数

事实上,它并不“记住”。

在每个递归级别, 的值count都是使用递归调用返回的值从头开始派生的。

于 2013-03-07T19:08:36.407 回答
0

您在count函数开始时将本地设置为 0,但随后将来自以后递归调用的所有计数添加到它,然后再将其返回给调用者。后面的每个函数都从 0 开始,然后加上 1 + 后面调用的计数。

于 2013-03-07T19:08:55.910 回答
0

您需要传递count给您进行的递归调用,以便它可以跟踪它并增加它。或者,您可以允许 count 成为全局变量并在每次调用时递增它,这相当不优雅。

于 2013-03-07T21:30:02.027 回答