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

関数の開始時にローカルで0に設定countしていますが、呼び出し元に戻す前に、後の再帰呼び出しからのすべてのカウントを関数に追加しています。後の各関数は0から始まりますが、その後1+後の呼び出しのカウントを追加します。

于 2013-03-07T19:08:55.910 に答える
0

再帰呼び出しを渡しcountて、それを追跡してインクリメントできるようにする必要があります。または、カウントをグローバル変数にして、呼び出しごとにインクリメントすることもできますが、これはかなり洗練されていません。

于 2013-03-07T21:30:02.027 に答える