我有一个函数可以计算小于二分搜索树中项目的数量。它工作正常。但我只是不明白为什么局部变量计数可以记住总数,因为每次递归调用,它都会重置为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
答案 0 :(得分:0)
为什么局部变量
count
可以记住总数
事实上,它并没有“记住”。
在每个递归级别,count
的值是使用递归调用返回的值从头开始派生的。
答案 1 :(得分:0)
您在函数开始时将count
本地设置为0,但之后您将所有计数从以后的递归调用添加到它,然后再将其返回给调用者。每个后来的函数从0开始,但随后加上1 +后来调用的计数。
答案 2 :(得分:0)
您需要将count
传递给您进行的递归调用,以便它可以跟踪并递增它。或者,您可以允许count为全局变量,并在每次调用时递增它,这相当不太优雅。