我用python2编写了一个递归程序来获得数字的乘法持久性;这是你必须将一个数字中的数字相乘直到达到一位数的次数。我还想将所有连续的乘法存储在列表中。
import operator
def persistence(n, count = []):
n = list(str(n))
if len(n) == 1:
return len(count)
else:
n = list(map(int, n))
n = reduce(operator.mul, n)
count.append(n)
return persistence(n)
该代码适用于第一个函数调用,但它不会将计数列表重置为空列表,而是保留先前获取的任何值。
对于第一个函数调用:
persistence(39)
输出为 3。这是预期的输出。 但是,当进行另一个函数调用时:
persistence(4)
它不是输出 0,而是输出 3;这是第一个函数调用的结果。
我认为问题出在全局列表上。我尝试在函数内声明列表,但它只是在每次递归调用时不断将列表重置为空。任何人都可以帮忙吗?
最佳答案
您遇到了常见的“可变默认参数”问题。
固定代码:
import operator
def persistence(n, count=None):
if count is None:
count = []
n = list(str(n))
if len(n) == 1:
return len(count)
else:
n = list(map(int, n))
n = reduce(operator.mul, n)
count.append(n)
return persistence(n, count) # pass in the list
调用:
print persistence(39)
print persistence(4)
产品:
3
0
关于python - 使用递归追加到列表python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47482405/