递归函数会记住最后一个结果作为参数

时间:2012-06-05 14:36:55

标签: python list recursion

  

可能重复:
  “Least Astonishment” in Python: The Mutable Default Argument

我试图将数字拆分为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]

但是只有在我第一次调用函数时才会工作,然后在第一次调用之后我的前一个结果显示为参数。

enter image description here

我该如何解决?

1 个答案:

答案 0 :(得分:3)

lst参数默认值更改为None,如果为None,则在函数内实例化。

阅读关于为什么使用可变默认参数值不好的Python Gotchas