2016-10-19 6 views
1

私は再帰を使用して文字列を逆転させる単純な関数を作ろうとしています。再帰関数:反転単語

これは私が試したものです:

def inverse(ch): 
     if ch=='' : 
      return '' 
     else: 
      return ch[len(ch)]+inverse(ch[1:len(ch)-1]) 

    print inverse('hello') 

そして、これは私が得るものです:

line 13, in inverse return ch[len(ch)]+inverse(ch[1:len(ch)-1]) IndexError: string index out of range

+2

0から 'len-1'までの文字列のインデックス。では、どうすれば 'ch [len(ch)]'が正しいのでしょうか? – Barmar

+0

行を分割し、一時変数を使用して、どのインデックスが間違っているか調べてください。 –

+0

単語の最後の文字を使用する場合は、負のインデックス 'ch [-1]'を使用します。最後の文字までのスライスは 'ch [0:-1]'です。 – Barmar

答えて

1

チェックこの:

ch[len(ch)-1]+inverse(ch[0:len(ch)-1]) 
3

あなたは、その長さの文字列のインデックスを作成していますただし、インデックスはゼロベースなので、安全にできる最大インデックスである長さ-1をスライスする必要があることに注意してくださいつかいます。

ます。ただし、インデックスに最後の項目[-1]を使って長さを気づかであることを選択することができます。

def inverse(ch): 
    if ch=='' : 
     return '' 
    else: 
     return ch[-1]+inverse(ch[:-1]) 

print inverse('hello') 
# olleh 

をそして、あなたはまた、おそらく[::-1]でスライスすると、あなたの再帰と同じ結果を提供することを心に留めておきたいです関数。

+0

私はうまくいきました!だから、最後の文字を得るためにch [len(ch)]を使うことはできませんか? – Ashref

+0

@Ashrefいいえ、あなたはマイナス1でそれをしなければなりません: 'ch [len(ch)-1]' –

1

あなたは本当に再帰を必要としません。

def inverse(chars): 
    char_list = list(chars) 
    char_list.reverse() 
    return ''.join(char_list)