2014-01-14 45 views
0

我有這個非常簡單的遞歸函數:邏輯基本情況

def subL(L): 
    x=len(L) 
    if x==0: 
     return L 
    else: 
     print(L[:x]) 
     subL(L[:x-1]) 

這是例如輸入我用:

x = [23,2,5,77,8,9] 
print(subL(x)) 

這是輸出:

[23, 2, 5, 77, 8, 9] 
[23, 2, 5, 77, 8] 
[23, 2, 5, 77] 
[23, 2, 5] 
[23, 2] 
[23] 
None 

該功能的基本情況如何工作if x==0: return L?這是我在輸出中得到None的原因嗎? 它可以修改爲簡單的產品:以下?

[23, 2, 5, 77, 8, 9] 
[23, 2, 5, 77, 8] 
[23, 2, 5, 77] 
[23, 2, 5] 
[23, 2] 
[23] 
+0

的'None'不被功能印刷;它由解釋器打印,因爲函數不返回任何內容。 –

回答

6

這是因爲你沒有返回遞歸函數的結果。遞歸行更改爲這個

return subL(L[:x-1]) 

如果你想獨自忽略最後None,調用功能,無需print,這樣

subL(x) 

如果你不明確返回任何東西,Python會默認返回None。這就是爲什麼你看到None正在打印。

整個程序能夠縮短這樣

def subL(L): 
    if L: 
     print(L) 
     return subL(L[:-1]) 
+0

+1感謝信息 – whytheq

+0

@whytheq不客氣:)請考慮接受這個答案,如果它可以幫助你:) – thefourtheye

+0

棘手 - 我真的很喜歡火山的一點點重寫。 – whytheq

1

稍加重寫,它工作

def subL(L): 
    if not L: 
     return 
    else: 
     print L 
     subL(L[:-1]) 
+0

+1更漂亮 - 讚賞 – whytheq