2016-10-19 50 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