避免";“内存不足”;递归python函数中的错误

避免";“内存不足”;递归python函数中的错误,python,recursion,Python,Recursion,我编写了一个递归python函数。30分钟-1小时后,由于内存不足,它将取消该进程。如果我查看任务管理器,我也会发现使用了太多的ram内存。如果我重新启动该功能,一切又恢复正常。如何避免这个问题并让程序“永远运行”?根据经验,在长时间运行的程序中不应使用递归调用。当然也有例外 递归函数通常用于应用程序指示管理调用该功能的内容的情况:例如,遍历树结构,或在数据库中查找某个内容,直到达到某个详细级别 长时间运行的程序很少属于这一类。。。即使是用机器人抓取页面也总是有一个参考点(当一个站点的“抓取”完

我编写了一个递归python函数。30分钟-1小时后,由于内存不足,它将取消该进程。如果我查看任务管理器,我也会发现使用了太多的ram内存。如果我重新启动该功能,一切又恢复正常。如何避免这个问题并让程序“永远运行”?

根据经验,在长时间运行的程序中不应使用递归调用。当然也有例外

递归函数通常用于应用程序指示管理调用该功能的内容的情况:例如,遍历树结构,或在数据库中查找某个内容,直到达到某个详细级别

长时间运行的程序很少属于这一类。。。即使是用机器人抓取页面也总是有一个参考点(当一个站点的“抓取”完成时),递归必须从头开始。有时很难诊断这个问题(我在我网站的日志中发现,一个更知名的机器人在一个坏链接上陷入了无限循环。小心无限循环!)


扩大Python的堆栈很少是解决方案。。。在代码中添加行以检查递归深度是否以应用程序中的已知间隔返回0。或者添加一个深度计数器…

程序只有在有足够的资源运行时才会永远运行。这听起来像是实现中的一个bug,而不是Python的限制。附加源代码会有帮助。你能发布递归函数或它的近似值吗?使用的输入是什么?您可能遇到堆栈溢出。请编写一个不会耗尽内存的算法。。请记住,Python不支持TCO,因此递归只适用于“绑定深度”。如果这是一个问题,那么在不使用递归的情况下完整(或部分)编写它,可能使用蹦床等。Python的默认递归限制为1000;如果每次调用运行30-60分钟,甚至没有达到递归限制,那么每次调用需要多长时间?请包含您的代码。如果您达到了递归限制,那么有必要通过完全消除递归(如John La Rooy on建议的while循环)重新编码来避免这种情况。