視覺化計算/呼叫樹
外觀
< 視覺化計算
| 一位讀者要求擴充套件此頁面,以包含更多內容。 你可以透過 新增新內容 (學習如何) 或在 閱覽室 尋求幫助。 |
呼叫樹是特定例項中呼叫的函式的視覺表示。例如,考慮遞迴函式
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)
此函式形成以下呼叫樹。
在檢視呼叫樹時很明顯,原始函式的複雜性要低得多,因此速度要快得多。