-1

リストと値をパラメーターとして受け取る再帰関数 lastIndex() を作成する必要があります。これは、リスト内の値が最後に出現したインデックスを返します。リスト内に値が見つからない場合、またはリストが空の場合、関数は -1 を返します。関数は再帰的でなければならず、パラメーターとして提供されるリストは変更できません。例:

>>>lastIndex([1,2,3,4,5,1],1)
5
>>>lastIndex([1,4,7,2,3,2],3)
4

私の現在のコード:

def lastIndex(lst,n):
    if lst[0] ==n:
        return -1
    else:
        1 + lastIndex(lst[1:],n)
4

3 に答える 3

3

前回の宿題の質問に対する私の回答で述べたように、再帰は次の 2 つで構成されます。

  • ベースケース
  • より基本的な問題への答えから問題への答えを基にする方法

この場合、おそらく探している基本ケースは空のリストです。

問題をより小さな問題に結び付ける方法は、入力リストを 2 つの部分に分割することです。入力の最後の要素と、最後の要素の前の要素のリストです。最後の要素の前の要素のリストは、小さな問題です。最後の要素は、より小さな問題を解決する必要があるかどうかを決定する方法です。


次の一連の質問を検討してください。

  • 入力の最後の要素は、探している要素ですか? もしそうなら、その前にいくつの要素がありますか?
  • それ以外の場合、現在の最後の要素を削除して再試行した場合、上記の一連の質問に対する答えは何ですか?

この場合、再帰は「再試行」です。

于 2012-10-23T04:43:43.567 に答える
0

これはどう?末尾再帰です。

>>> def lastIndex(lst,n,c=None):
...     if c is None:
...        c = len(lst)-1
...     if c < 0:
...         return -1
...     elif lst[c] == n:
...         return c
...     else:
...         return lastIndex(lst, n, c-1)
... 
>>> lastIndex([1,2,3,4,5,1],1)
5
>>> lastIndex([1,4,7,2,3,2],3)
4
于 2012-10-23T04:49:50.703 に答える
-1
def lastindex(lst, what_to_find, start_length=None, depth=0):
    if not start_length:
        start_length=len(lst)-1
    if not lst:
        return -1
    elif lst[-1]==what_to_find:
        return start_length - depth
    else:
        return lastindex(lst[:-1], what_to_find, start_length, depth+1)

これで十分だと思います。

>>> lastindex([0,0,0,0,0,2],3)
-1
>>> lastindex([1,2,3,4,5,6],3)
2
>>> lastindex([1,2,3,4,5,1],1)
5
>>> 
于 2012-10-23T05:21:17.327 に答える