python之递归栈溢出优化方式

因为栈的大小不是无限的,因此递归调用的次数过多便会致使栈的溢出,一般解决栈溢出的方法python

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

含表达式。编译器和解释器就能够对尾递归进行优化,递归自己不管调用多少次都只占用一个栈帧优化

,从而避免栈的溢出。递归

代码实现:编译器

#!usr/bin/python3it

# -*- coding:UTF-8 -*-编译

def fact(m):coding

    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

从结果就能够看到,调用尾递归的时候若是作出优化后,栈就不会增加,因此无论调用多少次都不会

致使栈溢出。

相关文章
相关标签/搜索