【问题标题】:python recursive solution for prime factorization [duplicate]素数分解的python递归解决方案[重复]
【发布时间】:2015-03-12 19:38:39
【问题描述】:

我是 python 新手,我真的很难理解递归。我写了一个函数,它接受一个整数,并返回一个数字的素数分解中所有数字的列表。

我反复写了这个:

def primeFac(n):
    lst=[]
    c=2
    while c<=n:
        if n%c==0:
            n//=c
            lst.append(c)
        else:
            c+=1
    return lst

返回:

>>> primeFac(5)
[5]
>>> primeFac(72)
[2, 2, 2, 3, 3]

我怎样才能递归地做到这一点? 这似乎没有必要,但我确实需要在期末考试中学会这样做。

这是我到目前为止写的:

def primeFac(n):
    lst = []
    c = 2
    if n<=c:
        lst.append(n)
    else:
        while n%c!=0:
            c+=1
        if n==c:
            lst.append(n)
        else:
            lst.append(c)
            lst.append(primeFac(n//c))
        return lst

我得到:

>>> primeFac(5)
[5]
>>> primeFac(72)
[2, [2, [2, [3, [3]]]]]

【问题讨论】:

  • 只用递归调用的结果扩展 lst 而不是附加它...lst += primeFac(n/c)

标签: python recursion prime-factoring


【解决方案1】:

你的代码很好,除了这个:

    lst.append(primeFac(n//c))
return lst

您附加返回值并返回一个列表,因此您将在您使用的“正常”迭代中将一个列表附加到您的列表中:

 lst.append(c)

所以你只是在附加值。

你可以这样做来连接列表:

lst = lst + primeFac(n//c))

【讨论】:

    猜你喜欢
    • 2021-11-03
    • 2013-08-31
    • 2023-04-03
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多