重複の可能性:
Pythonの「驚き最小の原則」:可変のデフォルト引数
数値を2の累乗に分割しようとしていますが、関数は前の呼び出しの結果を記憶しています。
from math import log
#split number in powers of 2
#n : number
#lst : the current list of numbers
def spn(n, lst=list()):
if n==1:
lst.append(n)
return lst
else:
#rdy : the ready-to-add number
rdy=2**((log(n+1,2))-1)
lst.append(rdy)
#n-rdy: the new number to evaluate
return spn(n-rdy, lst)
例えば:
spn(1)は[1]を返す必要があります
spn(3)は[2.0、1.0]を返す必要があります
spn(7)は[4.0、2.0、1.0]を返す必要があります
ただし、関数を最初に呼び出したときにのみ機能し、最初の呼び出しの後、前の結果が引数として表示されます。
どうすれば修正できますか?