无尽的递归vs真的?

时间:2014-07-26 01:48:07

标签: python multithreading recursion

我正在编写代码,现在我将要做的事情(简单版本)总是让我的函数运行收集数据并解析它然后做出决定然后将这些决定输出到屏幕并在我刚出现后直接重新运行它一个使用无限递归的想法,如下所示:

funcone():
    #do a bunch of calculations that add to an output list
    startnewoutputthread(output_list) #outputs stuff to the screen
    startnewfunconethread(funcone)

funcone()

而是当前代码,它在funcone()中包含所有内容,并在一个线程中使用while True语句,并在新线程中输出结尾。

一个人会比另一个好吗?我不认为无休止的递归会很糟糕,因为正在启动的线程都将在新的线程启动后完成?

2 个答案:

答案 0 :(得分:7)

不要做无休止的递归。它将使用比while True:循环更多的内存,如果程序运行的时间足够长,您将超过maximum recursion depth(默认为1000)并获得RuntimeError

答案 1 :(得分:1)

TL; DR:CPython解释器没有实现尾recursion elimination,所以使用迭代

IF 您正在使用CPYthon解释器,那么您遇到了问题,因为它没有实现尾递归消除。这意味着在某些时候,当新的堆栈帧堆积起来时,您将获得堆栈溢出。在这种情况下,使用迭代更好。

据说有人确实创建了a decorator to implement tail recursion

所有这一切都说在Python中使用迭代更好,因为这将是最惯用的实现,即。 " Python化"