2011-06-26 53 views
0
def index(L,v) 
    ''' Return index of value v in L ''' 
    pass 

我需要使用遞歸實現此功能的幫助。 真的很新的遞歸的東西,所以任何建議將幫助。使用遞歸找到列表中元素的索引

請注意,L是一個列表。 v是一個值。

+1

它是你的功課嗎? – JBernardo

+3

你到目前爲止有什麼? – sth

+0

這不是一項家庭作業。星期四我有一個即將到來的期中。這是練習之一。 我有這樣的事情 高清指數(L,V): 如果L [0] ==五: 返回0 其他: 回報指數(L [1:],V) (這是假設那個v已經在列表中了,那麼它就行不通了!) 原來我一直只是缺少一個(+ 1):( SIGH我希望我能更好地理解遞歸! – s4kur402

回答

1

爲什麼有人會爲此編寫遞歸代碼?

>>> [1,2,4,8].index(4) 
2 
+0

我同意!lol 但他們希望我們練習...... – s4kur402

1

我認爲這是作業。

所以你需要了解遞歸。這裏有一個例子:

def countdown(n): 
    if n == 0: 
     print "Hello World!" 
    else: 
     print n 
     countdown(n-1) 

你需要從一個起點開始,在你的情況下它可能是第0個元素。

您需要一個終點,它應該是length - 1或者當您找到該元素時。

簡單的,如果其他人應該在這裏做,與上述倒計時的修改版本。

+0

我是新來的遞歸,真的有困難,主要是在堆棧數據中發生了什麼,對我來說這似乎很神奇 你能推薦任何教你遞歸的網站嗎?幫助你還好嗎? – s4kur402

+0

是的,http://openbookproject.net/thinkcs/python/english2e/ch11.html和http://www.greenteapress.com/thinkpython/html/book006.html – Pwnna

2

這一工程

def recursive_index(L, v): 
    return 0 if L[0] == v else 1 + recursive_index(L[1:], v) 

而且是非常愚蠢的(如果該值存在只會工作)

您可以添加if v not in L: return -1,使之成爲任何情況下工作,但是這是最糟糕的,甚至。

它真的必須遞歸嗎?

+0

是的。這是一個練習題大聲笑 我覺得它也很蠢 – s4kur402

+0

如果在第一次出現更多的價值v怎麼辦? – s4kur402

+0

@michelle它會找到第一個,如預期的 – JBernardo

0
L = [1, 2, 3, 4, 5, 6, 7, 11, 13] 

def index(L, v): 
    if len(L) == 0: 
      return -1000000 
    elif L[0] == v: 
     return 0 
    else: 
     return 1 + index(L[1:], v) 

print index(L, 7) 
print index(L, 13) 
print index(L, 100) 

*遠程解釋器重新初始化*

-999991

0

假設0索引,下面的代碼將返回,如果它的元素的索引存在,如果不包含在列表中,則爲-1:

def index(L, v): 
    if L == []: 
     return -1 
    elif L[0] == v: 
     return 0 
    rv = index(L[1:], v) 
    if rv < 0: 
     return rv 
    return rv + 1 
1

還有一種方法:

def rec(l,v, index=0): 
    try: 
     if l[index] == v: 
      return index 
    except IndexError: 
     return -1    

    return rec(l,v,index+1) 
+0

希望它不是作業:) – Trufa

+0

我希望這不是由於教學目的,但爲什麼隨後彈出列表中的第一個元素?由於您無論如何都將當前索引傳遞給函數,因此您可以只檢查給定索引處的值。 :) – jena

+0

@jena:我仍然宿醉:)謝謝! – Trufa

0

這裏一尾遞歸版本的它:但

def indexof(elem, list_): 
    return indexof_tailrec(elem, list_, 0) 

def indexof_tailrec(elem, list_, index): 
    if index >= len(list_): 
     return None 
    if list_[index] == elem: 
     return index 
    return indexof_tailrec(elem, list_, index + 1) 

注意的是,Python沒有尾調用優化的(至少不是隻要我知道)。

相關問題