可视化计算/调用树
外观
< 可视化计算
一位读者要求扩展此页面,以包含更多内容。 你可以通过 添加新内容 (学习如何) 或在 阅览室 寻求帮助。 |
调用树是特定实例中调用的函数的视觉表示。例如,考虑递归函数
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)
此函数形成以下调用树。
在查看调用树时很明显,原始函数的复杂性要低得多,因此速度要快得多。