2016-10-19 27 views
1

我试图写,将返回正整数的Python - 递归的方式返回一个整数的除数

除数(12)=> [1,2的除数的列表的功能列表,3,4,6,12]

我做了一个for循环,然后试图做一个递归,但我无法弄清楚如何做到这一点,并没有发现它的任何在线的例子任何语言。

def divisors(n,l=[]): 
    b=1 
    if n < 1: 
     return l 
    if n == 1: 

我以为使用l = []会比yield更好,但无论如何,我无法获得任何它。

编辑: 使用@vks代码,我写了下面的:

def fun(n, l=[],divisor=1): 
    if n % divisor == 0: 
     l.append(divisor) 
    if divisor == n: 
     return None 
    fun(n, l, divisor+1) 
    return l 
+0

1.请缩进代码。 2.我没有看到任何递归。请发布您的完整代码,哪些不起作用。 – Carcigenicate

+0

嗯,我无法弄清楚如何做递归,我试过的任何东西都没有任何用处。 – tilifoze

+0

写出你的循环函数,然后在循环结束时你变异了一些变量(如除数列表),然后递归并传递列表。你也可能需要函数的第三个参数来跟踪当前的分母,每递增一次就会增加一个分母。 – Carcigenicate

回答

3

你可以尝试这样的事情。

x=12 
l=[] 
def fun(n, l): 
    if x%n==0: 
     l.append(n) 
    if n==1: 
     return None 
    fun(n-1, l) 
fun(x, l) 
print l 
1

这个怎么样,

>>> n = 12 
>>> l = [i for i in range(1, n+1) if n%i==0] 
>>> l 
[1, 2, 3, 4, 6, 12] 
+0

虽然这是一个很好的答案,但我不认为它是递归的。 – MooingRawr