2013-05-04 85 views
4

我在使用codecademy.com時在python中有一個非常簡單的函數。代碼通過了練習,但確實會導致最大的遞歸錯誤,我不明白爲什麼。這是我有:爲什麼此功能會導致最大回收錯誤?

n = [3, 5, 7] 

def double_list(x): 
    for i in range(0, len(x)): 
     x[i] = x[i] * 2 
    return double_list(x) 

print double_list(n) 
+1

您的遞歸函數沒有任何中斷條件。 – 2013-05-04 13:35:41

+2

這個功能顯然永遠不會結束。我的意思是,多想一點。你永遠不會退出它,只要一遍又一遍地繼續使用相同的列表。 – darxsys 2013-05-04 13:36:37

+2

作爲樣式註釋,'return x'比'return(x)'更受歡迎。由於Python的首要目標之一是應該可讀,所以很少有重要的事情。有關更多詳細信息,請參見[PEP8 Python風格指南](http://www.python.org/dev/peps/pep-0008/)。 – msw 2013-05-04 13:44:20

回答

6

因爲在你double_list你再打電話給double_list

return double_list(x) 

這將導致你進入無限循環,除非你設置了一個條件,在這個條件下它應該分解。

OP已經解決了它,這是他的解決方案:

n = [3, 5, 7] 

def double_list(x): 
    for i in range(0, len(x)): 
     x[i] = x[i] * 2 
    return x 

print double_list(n) 
+1

謝謝你,我只是把它改成'return(x)'而且修復了它。 – 2013-05-04 13:36:19

+0

呵呵,有時你需要大聲說出一些事情,然後才意識到自己做錯了什麼。不要忘記標記答案是正確的:) – Torxed 2013-05-04 13:37:26

+0

我會盡快將其標記爲正確的,強制性的13分鐘還沒有通過。感謝您的幫助:) – 2013-05-04 13:40:21

2

你忘了一個基本情況。每個遞歸函數都應該有一個基本的例子。它不斷調用自身,因此達到最大深度。

return double_list(x) 

一次又一次地調用相同的功能。

+0

謝謝@sukrit我改變它返回(x),並解決它。 – 2013-05-04 13:38:25

相關問題