2016-11-15 9 views
0

私は2つのパラメータを持つ関数を書きました。 1つは空の文字列、もう1つは文字列です。私の任務は、単語を逆にして空文字列に置くために再帰することです。 iveがそれを得たと思うように、私は「メモリ不足のエラー」を受けました。私はコードを書いて、それをリストにして、それを逆向きに反転させ、最初の文字を空文字列に置き、リストから文字を削除して各文字に再帰が起こるようにします。そして、それは彼らの同等の再帰がいつ終了するように、(彼らが比較できるように、私はリストを作った)空の文字列の長さに元の単語の長さを比較して、何かを書くとき再帰、メモリ不足?

def reverseString(prefix, aStr): 
    num = 1 
    if num > 0: 
     #prefix = "" 
     aStrlist = list(aStr) 
     revaStrlist = list(reversed(aStrlist)) 
     revaStrlist2 = list(reversed(aStrlist)) 
     prefixlist = list(prefix) 
     prefixlist.append(revaStrlist[0]) 
     del revaStrlist[0] 
      if len(revaStrlist2)!= len(prefixlist): 
       aStr = str(revaStrlist) 
       return reverseString(prefix,aStr) 
+1

これが有効なPythonの関数の定義のように見えないためにどのように見えるかです。 if文の下に書式設定の問題がありますか? –

+0

空文字列には文字を配置できません。文字列は不変です。関数が戻ると、パラメータに加えた変更はその(ローカル)変数で消えます。 – chepner

答えて

2

をIDKの再帰私は試してみて、約2物事

  1. 条件は、私は一回の反復を行うには、どのように私は次の反復にその進捗状況を渡すことができますしたいどのような再帰
  2. を停止すると思います。

また、私は1回の反復作業をしてから、もう一度自分自身を呼び出すことを心配してください。出力文字列の長さは、入力文字列の長さと一致した場合それ以外の場合は、

  • は逆に新しいリストに1文字を追加するには、ロジック

    1. にこれを適用するように、とにかく

      をデバッグするために難しくなることができます。現在まで蓄積されている進捗状況リストを維持する

    あなたのコードを少し修正したいと思っていましたが、あなたが最も学ぶのに役立つだろうと思っていましたが、それで苦労して書きました私はあなたのロジックと何をするだろう。 うまくいけば、あなたはこの例から何かを学ぶことができます。

    def reverse_string(input_string, output_list=[]): 
        # condition to keep going, lengths don't match we still have work to do otherwise output result 
        if len(output_list) < len(list(input_string)): 
         # lets see how much we have done so far. 
         # use the length of current new list as a way to get current character we are on 
         # as we are reversing it we need to take the length of the string minus the current character we are on 
         # because lists are zero indexed and strings aren't we need to minus 1 from the string length 
         character_index = len(input_string)-1 - len(output_list) 
         # then add it to our output list 
         output_list.append(input_string[character_index]) 
         # output_list is our progress so far pass it to the next iteration 
         return reverse_string(input_string, output_list) 
        else: 
         # combine the output list back into string when we are all done 
         return ''.join(output_list) 
    
    
    if __name__ == '__main__': 
        print(reverse_string('hello')) 
    

    これは再帰が、このコード

    1. 
    character_index = 5-1 - 0 
    character_index is set to 4 
    output_list so far = ['o'] 
    reverse_string('hello', ['o']) 
    
    2. 
    character_index = 5-1 - 1 
    character_index is set to 3 
    output_list so far = ['o', 'l'] 
    reverse_string('hello', ['o', 'l']) 
    
    3. 
    character_index = 5-1 - 2 
    character_index is set to 2 
    output_list so far = ['o', 'l', 'l'] 
    reverse_string('hello', ['o', 'l', 'l']) 
    
    4. 
    character_index = 5-1 - 3 
    character_index is set to 1 
    output_list so far = ['o', 'l', 'l', 'e'] 
    reverse_string('hello', ['o', 'l', 'l', 'e']) 
    
    5. 
    character_index = 5-1 - 4 
    character_index is set to 0 
    output_list so far = ['o', 'l', 'l', 'e', 'h'] 
    reverse_string('hello', ['o', 'l', 'l', 'e', 'h']) 
    
    6. lengths match just print what we have! 
    olleh