您的位置:首页 > 编程语言

编程的奇淫技巧1——尾调用

2018-01-30 14:31 176 查看

尾调用

尾调用指的是函数
func
的返回值(或者函数最后一条语句)是对另一个函数
func2
的调用。如果
func2
func
相同,就是尾递归咯。尾调用是个更广泛的概念。

效率

尾调用可以不在调用栈上增加新的栈帧,而是更新它,从而像迭代一样,因此尾递归仅占用常量的栈空间。

例子

wikipedia的代码例子来说明什么是尾递归。

def recsum(x):
if x == 1:
return x
else:
return x + recsum(x - 1)


这里
recsum
函数的返回值中
x+recsum(x-1)
是一个表达式,在调用了
recsum(x-1)
后还需要计算表达式的值,那么就需要继续保留原来
recsum(x)
的调用栈,所以不是尾递归。

修改成尾递归的代码:

def tailrecsum(x, running_total=0):
if x == 0:
return running_total
else:
return tailrecsum(x - 1, running_total + x)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编程语言