2013-10-21 60 views
0

我需要计算我在树上访问的节点数量,同时查找一个标记(本例中为1)。到目前为止,我想出了:递归计算访问节点

def search_recursive(node,rounds=0): 
    if len(node)==2: 
     if node[1]==1: 
      print rounds 
    else: 
     rounds += 1 
     huff_search_recursive(node[1],rounds) 
     huff_search_recursive(node[2],rounds) 

但是,如果我尝试两轮分配给像什么:

def search_recursive(node,rounds=0): 
    if len(node)==2: 
     if node[1]==1: 
      return rounds 
    else: 
     rounds += 1 
     huff_search_recursive(node[1],rounds) 
     huff_search_recursive(node[2],rounds) 

Python的分配没有限制,任何变量。例如。

rounds = search_recursive(node) 

节点的一个例子是:

node = (1.0, (0.5, 0), (0.5, (0.25, 0), (0.25, (0.125, 1), (0.125, 0)))) 

任何人都可以向我解释是什么导致这个错误,我怎么能在未来的测试呢?

+1

你在哪里返回中间步骤的值? –

+0

重复的http://stackoverflow.com/questions/17173822/python-issues-with-return-statement和其他几个人 –

+0

@brunodesthuilliers谢谢! –

回答

5

在每个函数调用中,rounds是一个不同的变量。 更改它不会更改外部函数调用的rounds变量。 您需要返回该值并使用返回的值。

def search_recursive(node): 
    rounds = 0 
    if len(node)==2: 
     if node[1]==1: 
      return rounds 
    else: 
     rounds += 1 
     rounds += search_recursive(node[1]) 
     rounds += search_recursive(node[2]) 
    return rounds