跳轉到內容

視覺化計算/呼叫樹

來自華夏公益教科書

呼叫樹是特定例項中呼叫的函式的視覺表示。例如,考慮遞迴函式

    def even(i): # return True iff i is an even number
           return i % 2 == 0
    def power(base, exp):
           if exp == 1:
               return base
           elif even(exp):
               base_to_half_exp = power(base, exp//2)
               return base_to_half_exp * base_to_half_exp
           else:[[:Image:]]
               return base * power(base, exp-1)
    print power(2, 7)

power(2, 7) 函式將多次呼叫 even() 函式和 power() 函式。此圖顯示了函式的進展。

每次函式呼叫另一個函式時,箭頭就會從函式指向它正在呼叫的函式。當然,多個箭頭可以從同一個函式發源。

呼叫樹可以利用不同的約定來設計,以強調函式的不同點。如果每個函式返回的值對問題很重要,那麼這些值可以放在呼叫樹中,箭頭向上指向將使用該值的函式。如果時間是最重要的,並且多個箭頭起源於同一個函式,則第一個被呼叫的函式應該放在最左邊。此外,呼叫樹可以幫助顯示函式的複雜性。考慮這個 power 函式


       def even(i): # return True iff i is an even number
           return i % 2 == 0
       def power(base, exp):
           if exp == 1:
               return base
           elif even(exp):
               return power(base, exp//2) * power(base, exp//2)
           else:
               return base * power(base, exp-1)
       print power(2, 7)

此函式形成以下呼叫樹。

在檢視呼叫樹時很明顯,原始函式的複雜性要低得多,因此速度要快得多。

華夏公益教科書