Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中断深度递归-2.7.8_Python_Recursion_Break - Fatal编程技术网

Python中断深度递归-2.7.8

Python中断深度递归-2.7.8,python,recursion,break,Python,Recursion,Break,所以我有一个巨大的递归函数。在某个时刻,它会找到一个结果,我需要它来停止所有函数。建议?假设您无法重构代码,您可以使用生成器来实现这一点。假设我们有以下代码: from __future__ import print_function def g(n): print("g before", n) if n < 3: for i in g(n+1): yield i else: yield n prin

所以我有一个巨大的递归函数。在某个时刻,它会找到一个结果,我需要它来停止所有函数。建议?

假设您无法重构代码,您可以使用生成器来实现这一点。假设我们有以下代码:

from __future__ import print_function

def g(n):
    print("g before", n)
    if n < 3:
        for i in g(n+1):
            yield i
    else:
        yield n
    print("g after", n)
现在,您想要的是得到3并停止,因此我们只获取第一个值:

>>> print(g(0).__iter__().next())
g before 0
g before 1
g before 2
g before 3
3

建议:给我们看看你的代码。我不能给你全部的代码,它太大了。难道没有办法打破所有的递归吗?然后告诉我们代码遵循的一般模式。当然,您可以在某个地方返回最终结果或某个“未找到”类型,比如None,然后在某个地方执行递归调用。可能您必须检查递归调用的结果,然后返回结果或重试。但是如果不知道你的函数看起来是什么样子的话,这是不可能的。也许把它重构成更小的函数使它更紧凑是个好主意?好吧,那么函数会找到一个特殊的字符串,在这个字符串中它会找到很多其他的字符串。在某个点上,它找到了正确的字符串,我只是做了一个简单的if string==rightstring,然后我找到了它。这就是它目前所做的,但在找到正确的字符串后,它会继续进行。我想终止函数的所有实例。这可能吗?
>>> print(g(0).__iter__().next())
g before 0
g before 1
g before 2
g before 3
3