1

countLetterString(char, str)指定された文字が文字列に出現する回数を見つけるために再帰を使用する必要がある場所で呼び出される関数を作成する必要があります。

これまでの私のコードは次のようになります。

def countLetterString(char, str):
    if not str:
        return 0
    else:
        return 1 + countLetterString(char, str[1:])

これは、文字列に含まれる文字数を数えるだけですが、文字列を分割する方法がわからず、文字が分割されているかどうかを確認できません。

4

7 に答える 7

3

最初のステップは、この問題を細かく分割することです。

1. 文字が文字列に含まれているかどうかを確認するにはどうすればよいですか?

これを再帰的に行っている場合は、文字列の最初の文字かどうかを確認する必要があります。

2. 2 つのキャラクターを比較するにはどうすればよいですか?

Python には、 2 つのものが等しい==かどうかを判断する演算子があります。

3. 文字列の最初の文字が一致するかどうかがわかった後、どうすればよいですか?

文字列の残りの部分に進む必要がありますが、これまでに見た文字の数をどうにかして維持する必要があります。これは通常、for ループの外側で変数を宣言できるため非常に簡単ですが、新しい関数呼び出しごとにプログラムの状態を再帰的に渡す必要があります。

文字列の長さを再帰的に計算する例を次に示します。

def length(s): 
   if not s:  # test if there are no more characters in the string
      return 0
   else:  # maintain a count by adding 1 each time you return
          # get all but the first character using a slice
      return 1 + length( s[1:] )

この例から、問題を完了できるかどうかを確認してください。あなたの場合、追加のステップが 1 つあります。

4. いつ再帰をやめるのですか?

これは、再帰を扱うとき、いつ自分自身を思い出すのをやめる必要があるのか​​という疑問です。これを理解できるかどうかを確認してください。

編集

not sPython では空の文字列が;""に評価されるため、s が空かどうかをテストします。Falsenot False == True

于 2013-09-26T18:46:41.563 に答える
2

まず第一にstr、組み込みの str 型をマスクするため、変数名として使用しないでください。sorのようなものを使用してくださいtext

行は期待どおりに動作しません。if str == 0:文字列が空かどうかを確認する正しい方法は、if not str:orを使用if len(str) == 0:することです (最初の方法が推奨されます)。詳細については、この回答を参照してください。

これで、再帰の基本ケースがわかりました。「ステップ」とは何ですか。戻りたいか1 + countLetterString(...)0 + countLetterString(...)呼び出している場所countLetterString()に 1 文字少なくなります。1削除する文字が一致する場合char、またはそうでない場合に使用し0ます。たとえば、 の最初の文字がを使用してs一致するかどうかを確認できます。chars[0] == char

文字列内の 1 文字を削除するには、スライシングを使用できます。そのため、文字列についてはs、最初の を使用したs[1:]文字以外のすべての文字、または を使用した最後の文字以外のすべての文字を取得できますs[:-1]。始めるにはこれで十分だと思います!

于 2013-09-26T18:44:21.863 に答える
1

再帰についての推論には、問題を「通常の」ケースと「特別な」ケースに分ける必要があります。ここでの特別なケースは何ですか?文字列が空の場合、文字列にchar含まれていないことは確かです。その場合は 0 を返します。

他に特別なケースはありますか?あまり!文字列が空でない場合は、最初の文字 ( the_string[0]) と残りのすべての文字 ( ) に分割できますthe_string[1:]char次に、残りの文字の出現回数を再帰的に数え、最初の文字が探している文字と等しい場合は 1 を追加します。

これは課題だと思いますので、コードは書きません。それは難しいことではありません。動作しないことに注意してください。これは、整数であるif str == 0:かどうかをテストしています。 うまくいく方法であり、別の方法です。より短い方法もありますが、現時点ではおそらくそれらが最も明確です。str0if len(str) == 0:if str == "":

于 2013-09-26T18:47:22.313 に答える
0

まず最初に、char や str を使用しないことをお勧めします。Str は構築された関数/型であり、char が問題を引き起こすとは思いませんが、他の多くの言語では予約語です。次に、次のように count を使用して同じ機能を実現できます。

letterstring="This is a string!"
letterstring.count("i")

これにより、指定された文字列での i の出現回数が得られます。この場合は 3 です。

純粋に推測のためにそれを行う必要がある場合、再帰で覚えておくべきことは、各呼び出しに対して何らかの条件またはカウンターを実行し、それを変更するコード内に何らかの条件を配置することです。例えば:

def  countToZero(count):
   print(str(count))
   if count > 0:
      countToZero(count-1)

これは非常に簡単な例であることに注意してください。ただし、各呼び出しでわかるように、現在の値を出力し、カウントを減らしながら関数が再度呼び出します。カウントが 0 以下になると、関数は終了します。

これを知っていると、カウント、文字列で比較しているインデックス、検索している文字、および例の文字列自体を追跡する必要があります。あなたのためにコードを実行しなくても、少なくとも開始する必要があると思います。

于 2013-09-26T19:42:19.523 に答える