网络编程
位置:首页>> 网络编程>> Python编程>> python防止栈溢出的实例讲解

python防止栈溢出的实例讲解

作者:小妮浅浅  发布时间:2022-07-31 17:17:15 

标签:python,栈溢出

1、说明

使用递归函数的优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出。

解决递归调用栈溢出的方法是通过尾递归优化,事实上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数也是可以的。

2、实例


def fact(n):
   return fact_iter(n, 1)

def fact_iter(num, product):
   if num == 1:
       return product
   return fact_iter(num - 1, num * product)

# fact(5)的调用过程
===> fact_iter(5, 1)
===> fact_iter(4, 5)
===> fact_iter(3, 20)
===> fact_iter(2, 60)
===> fact_iter(1, 120)
===> 120

知识点扩展:

栈溢出

在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。可以试试fact(1000):


>>> fact(1000)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "<stdin>", line 4, in fact
 ...
 File "<stdin>", line 4, in fact
RuntimeError: maximum recursion depth exceeded

来源:https://www.py.cn/jishu/jichu/30482.html

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com