python - 使用递归追加到列表python

标签 python recursion global-variables

我用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/

相关文章:

Python - 没有返回逻辑的递归函数

list - 如何在 Haskell 中定义对函数的递归调用列表

dll - 首先调用 DllMain() 还是全局静态对象构造函数?

r - 如何在 R 的函数中使用 acast (reshape2)?

python - 我想使用 Python 字符串格式化表达式将数字格式化为百分比,但它失败了

python - 在x节点minidom xml python之后插入

python - Django管理员仅当Selectbox具有特定值时才显示字段

python - 是否可以在不先写入文件的情况下组合来自 ffmpeg-python 的音频和视频?

R Shiny : Infinite Recursion

c - 在 .c 文件之间共享全局变量