Pythonで再帰を使って文字列を反転させるプログラムの書き方
再帰(リカージョン)の手法を使って文字列を逆順に並べ替えたい場合は、ユーザー定義の関数を再帰と組み合わせて実装します。
再帰とは、大きな問題をより小さな単位に分割してそれぞれの結果を計算し、それらを組み合わせることで最終的な答えを導き出す手法です。文字列の反転においても、この考え方をそのまま応用できます。
コード例
以下に実際のプログラム例を示します。
def reverse_string(my_string):
if len(my_string) == 0:
return my_string
else:
return reverse_string(my_string[1:]) + my_string[0]
my_str = str(input("Enter the string that needs to be reversed : "))
print("The string is :")
print(my_str)
print("The reversed string is :")
print(reverse_string(my_str))
実行結果
Enter the string that needs to be reversed : Williw
The string is :
Williw
The reversed string is :
williW
コードの解説
- reverse_string という名前の関数を定義し、文字列を引数として受け取ります。
- まず文字列の長さを判定し、長さが 0 の場合(ベースケース)はそのまま文字列を返して再帰を終了します。
- 長さが 0 でない場合は、先頭の1文字を除いた残りの部分(my_string[1:])に対して自分自身を再度呼び出し、その戻り値の末尾に先頭の1文字(my_string[0])を連結して返します。
- 関数の外側では、input() を使ってユーザーに文字列の入力を促します。
- 入力された元の文字列をコンソールに表示します。
- 入力文字列を引数として reverse_string 関数を呼び出し、反転後の結果をコンソールに出力します。
再帰の動作イメージ
たとえば入力が「Williw」の場合、関数は次のように動作します。
- reverse_string("Williw") → reverse_string("illiw") + "W"
- reverse_string("illiw") → reverse_string("lliw") + "i"
- …という処理が繰り返され、最終的に空文字列になった時点で再帰が終了します。
- 各段階で取り出した文字が末尾に連結されていくため、結果として「williW」という反転された文字列が得られます。
なお、この方法は理解しやすい反面、再帰呼び出しごとに新しい文字列を生成するため、非常に長い文字列ではパフォーマンスや再帰深度の制限に注意が必要です。実務ではスライス構文を使った my_string[::-1] や組み込みの reversed() 関数を使う方法も一般的です。ただし、再帰の仕組みを学ぶ題材としては、この実装はとても良い例といえます。
-
Pythonで文字列内の母音を逆順に入れ替える方法
文字列内の母音を反転するとは小文字のみで構成された文字列が与えられたとき、その中に含まれる母音(a・e・i・o・u)だけを逆順に入れ替える問題を考えてみましょう。たとえば、文字列が「hello」の場合、母音は「e」と「o」なので、これらを反転すると結果は「holle」になります。同様に、「programming」の場合は「prigrammong」が出力されます。解決のための手順この問題は、次の手順に沿って解くことができます。文字列を走査し、母音の一覧を作成すると同時に、その出現位置(インデックス)も記録します収集した母音のリストを逆順に並べ替えますカウンター idx を 0 で初期化しますi
-
Pythonで文字列を逆順にする方法|スライスとreversed()の使い方を解説
Pythonでは、文字列スライスやrange演算子を活用することで、文字列を簡単に逆順(反転)にすることができます。この記事では、代表的な2つの方法をわかりやすく解説します。 方法1:スライス記法 [::-1] を使う(推奨・高速) 最もシンプルで一般的なのが、スライス記法を使う方法です。ステップに -1 を指定するだけで、文字列を後ろから前へ一文字ずつ取り出せます。 >>> Hello[::-1] olleH >>> Halloween[::-1] neewollaH スライスの仕組み 角括弧 [] の中には、コロン「:」で区切った3つの値を指定できます