再帰を使って文字列が回文かどうかを判定するPythonプログラム
文字列が回文(パリンドローム)であるかどうかを再帰を使って判定するには、シンプルなインデックス操作とユーザー定義関数、そして再帰呼び出しを組み合わせます。
回文とは、左から右に読んでも、右から左に読んでも、各位置の文字が同じになる文字列や値のことです。たとえば「MalaM」や「しんぶんし」などが代表例です。
再帰とは、大きな問題をより小さな部分問題に分割して計算し、その結果を組み合わせて全体の答えを導き出す手法です。回文判定では「先頭と末尾の文字を比較し、一致していれば両端を除いた残りの文字列に対して同じ処理を繰り返す」という形で再帰を活用できます。
以下に実際のコード例を示します。
サンプルコード
def check_palindrome(my_str):
if len(my_str) < 1:
return True
else:
if my_str[0] == my_str[-1]:
return check_palindrome(my_str[1:-1])
else:
return False
my_string = str(input("Enter the string :"))
print("The string is ")
print(my_string)
if(check_palindrome(my_string)==True):
print("The string is a palindrome")
else:
print("The string isn't a palindrome")実行結果
Enter the string : MalaM MalaM The string is MalaM The string is a palindrome
コードの解説
- まず、「check_palindrome」という名前の関数を定義し、引数として文字列を受け取ります。
- 文字列の長さが1未満(つまり空文字列)になった場合は、それ以上比較する必要がないため「True」を返します。これが再帰の終了条件(ベースケース)です。
- そうでない場合は、文字列の最初の文字と最後の文字が一致するかどうかを確認します。
- 一致していれば、スライス
my_str[1:-1]を使って先頭と末尾を取り除いた文字列に対して、同じ関数を再度呼び出します(再帰呼び出し)。 - 先頭と末尾の文字が一致しなかった場合は、その時点で回文ではないことが確定するため「False」を返します。
- 関数の外側では、ユーザーに対して文字列の入力を求めます。
- 入力された文字列はコンソールに表示されます。
- その文字列を引数として「check_palindrome」関数を呼び出し、判定を行います。
- 戻り値が「True」であれば「回文である」ことを示すメッセージをコンソールに表示します。
- 「False」であれば「回文ではない」ことを示す別のメッセージを表示します。
このように、再帰を利用することでループ処理を書かずに簡潔なコードで回文判定を実装できます。ただし、非常に長い文字列を扱う場合には再帰の深さ制限(Pythonではデフォルトで約1000回)に注意が必要です。
-
Pythonで二分木の通り順走査(Inorder Traversal)が回文かどうかを判定する方法
問題の概要各ノードに0〜9のいずれかの数字が格納された二分木があるとします。この木を通り順走査(inorder traversal)した結果が回文(前から読んでも後ろから読んでも同じ並び)になっているかどうかを判定するプログラムを作成します。例えば、次のような木が入力として与えられた場合を考えてみましょう。この木の通り順走査の結果は [2, 6, 10, 6, 2] となり、左右対称の並びであるため、出力は True になります。解決のアプローチこの問題は、再帰を使わずにスタックを利用した反復的な通り順走査を行うことで解けます。手順は以下のとおりです。ルートが null の場合は True を
-
指定された文字列がキーワードであるかどうかを確認するPythonプログラム
この記事では、指定された文字列がPythonのキーワード(予約語)であるかどうかを判定する方法について解説します。問題の概要与えられた文字列が、Pythonにおけるキーワードであるかどうかを確認する必要があります。キーワードとは、言語によって特別な用途のために予約されている単語であり、変数名や関数名などの識別子として使用することはできません。例えば「if」「for」「while」「def」などはすべてキーワードです。これらの名前を変数に使おうとすると、構文エラーが発生します。解決策:keywordモジュールの活用Pythonには標準ライブラリとしてkeywordモジュールが用意されており、これ