次の再帰関数があります
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]
seq
これを防ぐ方法は、を呼び出すときに に空のリストを与えることcollatz
です:
>>> collatz(3,seq=[])
[3, 10, 5, 16, 8, 4, 2, 1]
の代わりcollatz
にできるように別の方法で書く方法はありますか?collatz(3)
collatz(3,seq=[]