递归调用中的局部变量

时间:2013-03-07 19:04:56

标签: python

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

3 个答案:

答案 0 :(得分:0)

  

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

事实上,它并没有“记住”。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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