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

python之递归栈溢出优化方式

2018-05-10 21:22 134 查看

由于栈的大小不是无限的,所以递归调用的次数过多便会导致栈的溢出,通常解决栈溢出的方法

是尾递归优化,尾递归跟循环的效果一样,它在函数返回时调用函数本身,并在return语句不能包

含表达式。编译器和解释器就可以对尾递归进行优化,递归本身无论调用多少次都只占用一个栈帧

,从而避免栈的溢出。

代码实现:

#!usr/bin/python3

# -*- coding:UTF-8 -*-

def fact(m):

    return fact_item(n, 1)

def fact_item(num, p):

    if num == 1:

        return p

    return fact_item(num - 1, num * p)

print(fact(5))

代码的调用过程:

=====> fact_item(5, 1)

=====> fact_item(4, 5)

=====> fact_item(3, 20)

=====> fact_item(2, 60)

=====> fact_item(1, 120)

>>> 120

从结果就可以看到,调用尾递归的时候如果做出优化后,栈就不会增长,所以不管调用多少次都不会

导致栈溢出。

 

 

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  尾递归