用于素数分解的python递归解决方案

时间:2015-03-12 19:38:39

标签: python recursion prime-factoring

我是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]]]]]

1 个答案:

答案 0 :(得分:1)

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

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

你附加了返回,并返回一个列表,所以你将在你使用的“正常”迭代中将列表附加到列表中:

 lst.append(c)

所以你只追加价值。

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

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