2013-11-14 61 views
0

我有以下的递归函数递归函数的返回值保持结果从先前运行

def collatz(n,seq=[]): 
    seq.append(n) 
    if n == 1: 
     return seq 
    if n%2 == 0: 
     return collatz(n/2, seq) 
    else: 
     return collatz((3*n)+1, seq) 

当我运行这个函数多次,SEQ仍包含从之前的运行值:

>>> collatz(1) 
[1]    # correct 
>>> collatz(2) 
[1, 2, 1]   # should be [2,1] 
>>> collatz(3) 
[1, 2, 1, 3, 10, 5, 16, 8, 4, 2, 1] # should be [3, 10, 5, 16, 8, 4, 2, 1] 

防止这种情况的方法是在致电collatz时向seq提供空列表:

>>> collatz(3,seq=[]) 
[3, 10, 5, 16, 8, 4, 2, 1] 

有没有办法以不同的方式写collatz,以便我可以做collatz(3)而不是collatz(3,seq=[]

回答