Как использовать итератор в рекурсивной функции в Python? - PullRequest
0 голосов
/ 13 сентября 2011

Я хочу преобразовать свой код так, чтобы мне не приходилось использовать дополнительную переменную (например, s в приведенном ниже примере).Я знаю, что есть способ использовать итератор, но я не знаю как.Может кто-нибудь помочь?Большое спасибо.

from numbers import Number

a = [[[1,2],[3,4]],[[5,6],[7,8]]]


def trav(root,s):
    if isinstance(root,Number):
        print(str(root) + " -> " + s)
    else:
        s = s + "0"
        trav(root[0],s)
        s = s[:-1]

        s = s + "1"
        trav(root[1],s)
        s = s[:-1]

s = ""
trav(a,s)

1 Ответ

1 голос
/ 13 сентября 2011

Почему бы просто ...

def trav(root, s=""):

и тогда вы можете опустить s = "" строку и назвать ее как trav(a)? Также, если вы захотите просто вставить одну или две вещи, вы можете сделать меньше нарезки:

from numbers import Number

a = [[[1,2],[3,4]],[[5,6],[7,8]]]


def trav(root, s=""):
    if isinstance(root, Number):
        print("%s -> %s" % (root, s))
    else:
        trav(root[0], s + "0")
        trav(root[1], s + "1")

trav(a)

Обратите внимание, что все это не имеет ничего общего с итераторами; Я не уверен, что ты там думал. s здесь действует как аккумулятор аргумент; возможно, это был термин, о котором вы думали?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...