2011-09-13 41 views
0

我想轉換我的代碼,這樣我就不必使用額外的變量(即下例中的s)。我知道有一種使用迭代器的方法,但我不知道如何。有人可以幫忙嗎?謝謝一堆。如何在python中使用迭代器遞歸函數?

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

所以這是一棵二叉樹。 –

+0

's = s +「0」'會更整潔,因爲s + =「0」'。 –

回答

1

爲什麼不......

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這裏充當累加器參數;也許這就是你想的那個術語?