2014-10-23 3 views
-1

Итак, у меня есть огромная рекурсивная функция. В какой-то момент он находит результат, и мне нужно, чтобы он остановил все функции. Предложения?Python break глубокая рекурсия - 2.7.8

+5

Предложение: Показать код. –

+0

Я не могу показать вам весь код, он огромен. Разве нет способа нарушить рекурсию? –

+3

Затем покажите нам общий шаблон, следующий за кодом. Разумеется, где-то вы возвращаете либо конечный результат, либо какой-то «не найденный» тип, например None, и где-то вы делаете рекурсивный вызов. Вероятно, вам нужно проверить результат рекурсивного вызова и либо вернуть результат, либо повторить попытку. Но, не понимая, как выглядит ваша функция, невозможно помочь. –

ответ

2

Предполагая, что вы не можете реорганизовать свой код, вы можете использовать генераторы для достижения этого. Допустим, мы имеем следующий код:

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) 

Нормальное исполнение будет:

>> for i in g(0): 
...  print(i) 
... 
g before 0 
g before 1 
g before 2 
g before 3 
3 
g after 3 
g after 2 
g after 1 
g after 0 

Теперь то, что вы хотите, чтобы получить 3 и остановить прямо там, так что мы просто принести первое значение:

>>> print(g(0).__iter__().next()) 
g before 0 
g before 1 
g before 2 
g before 3 
3 
Смежные вопросы