1

リストまたは文字列内の特定の要素のすべてのインデックス値を検索するプログラムを作成する必要があります。再帰を使用する必要あり、関数は2つの引数しかとることができません。

私の問題は、私のプログラムが最初のインデックスだけを見つけて停止することです。要件を満たすように変更するにはどうすればよいですか?

私のコード:

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

入力:

  1. find_all( [1,2,3,4,2,4,5,2,1], 2)
  2. find_all("hello wonderful world", "w")

必要な出力:

  1. [1,4,7]
  2. [6,16]
4

5 に答える 5

4

Python の機能を使用して、リストを逆方向に移動し、最後の要素を取得できます。次に、リストを + 演算子でまとめます。リストを逆方向にたどることで、リストの最初から最後に移動するときに値を失うのではなく、値が見つかったときにインデックスを見つけることができます。

def find_all(L, v):
    if not L:
            return []

    result = []
    if L[-1] == v:
            result = [len(L)-1]

    return find_all(L[:-1], v) + result
于 2012-11-13T07:27:53.500 に答える
1

どういうわけかカウンターを追跡する必要があります。アイデアはfind_all(L, v)、「実際の」再帰関数へのインターフェースとして使用することです:

def find_all(L, v):
    return _find_all(L, v, 0)

def _find_all(L, v, position):
    # Your algorithm here

これは宿題なので、私はあなたのために仕事をしませんが、あなたはここから続けられるはずです。

于 2012-11-13T07:34:13.073 に答える
0

C++ でのコード

 int allIndexes(int input[], int size, int x, int output[]){

 if(size==0)
      return 0;
    int ans=allIndexes(input, size-1, x , output );
    if(input[size-1]==x)
    {
        output[ans]=size-1;
       return ans+1; 
    }
    return ans;
}  
于 2019-07-14T21:12:20.717 に答える