2011-04-18 114 views
0

如果你有一個列表= [1,2,3,4,5]遞歸計算列表長度

你將如何遞歸計算列表的長度而不使用len(list)?

myarray = [1,2,3,4,5] 

def mylist(myarray): 
    if (myarray == []): 
     print ("The list is empty") 
     return 
    return 1 + ? 

不想使用len,但每次在列表中存在值時只需加1。我會怎麼做?

+0

請'不myarray'取代'(myArray的== [])'。 – 2011-04-18 00:42:16

+0

我不禁要問:你爲什麼要這麼做? DTing接受的答案與標準的len函數(Python列表的非常短的恆定時間)相比,具有O(N ** 2)複雜性,這是非常可怕的, – 2011-04-18 06:43:32

回答

8
>>> def list_length(L): 
...  if L: 
...   return 1 + list_length(L[1:]) 
...  return 0 
... 
>>> list_length(myarray) 
5 
>>> list_length([]) 
0 
>>> list_length([1]*4) 
4 
>>> 

如果列表中的元素,返回1 +列表中減去一個元素的長度。

您可以通過幾種不同的方式來做到這一點,但切片[:1]或[1:]會分別減去最後或第一個元素,這是合理的。

如果列表中沒有的元素,返回0

-1

使用遞歸函數。

基本上再次調用該函數並將其返回的計數添加到結果中。重要的是確保你在函數無關時退出(返回)。

退房這個職位 Python recursion and return statements