Python
 Computer >> コンピューター >  >> プログラミング >> Python

再帰を使ってスタックを逆順に反転するPythonプログラム

再帰(リカージョン)を使用してスタック(Stack)データ構造を反転させたい場合、値の追加・削除・要素の表示を行う基本メソッドに加え、反転処理を担当する stack_reverse メソッドを定義します。

本記事では、その実装方法と動作の仕組みを、実際のコード例と実行結果とともにわかりやすく解説します。

サンプルコード

class Stack_structure:
    def __init__(self):
        self.items = []

    def check_empty(self):
        return self.items == []

    def push_val(self, data):
        self.items.append(data)

    def pop_val(self):
        return self.items.pop()

    def print_it(self):
        for data in reversed(self.items):
            print(data)

def insert_bottom(instance, data):
    if instance.check_empty():
        instance.push_val(data)
    else:
        deleted_elem = instance.pop_val()
        insert_bottom(instance, data)
        instance.push_val(deleted_elem)

def stack_reverse(instance):
    if not instance.check_empty():
        deleted_elem = instance.pop_val()
        stack_reverse(instance)
        insert_bottom(instance, deleted_elem)

my_instance = Stack_structure()
data_list = input('Enter the elements to add to the stack: ').split()
for data in data_list:
    my_instance.push_val(int(data))

print('The reversed stack is:')
my_instance.print_it()
stack_reverse(my_instance)
print('The stack is:')
my_instance.print_it()

実行結果

Enter the elements to add to the stack: 23 56 73 81 8 9 0
The reversed stack is:
0
9
8
81
73
56
23
The stack is:
23
56
73
81
8
9
0

プログラムの仕組み

  • Stack_structure クラスを作成し、__init__ メソッド内で空のリストを初期化します。

  • check_empty メソッドは、スタックが空かどうかを判定します。

  • push_val メソッドは、引数で受け取ったデータをスタックの末尾に追加します。

  • pop_val メソッドは、スタックから末尾の要素を取り除き、その値を返します。

  • print_it メソッドは、reversed 関数を使ってスタックの要素を見やすい形で表示します。

  • insert_bottom 関数は、通常の追加処理とは異なり、要素をスタックの一番下(底)に挿入するための補助関数です。スタックが空になるまで要素を取り出してから、目的のデータを挿入し、取り出した要素を元の順序で戻すことで実現しています。

  • stack_reverse 関数は、スタックが空になるまで要素を一つずつ取り出しながら自分自身を再帰的に呼び出し、最後に insert_bottom を使って各要素を底から積み直すことで、スタック全体を反転させます。

  • このクラスのインスタンスを生成し、ユーザーからスペース区切りで入力された複数の要素を受け取ります。

  • 受け取った各要素を反復処理し、push_val メソッドでスタックへ追加していきます。

  • まず反転前の状態を表示した後、stack_reverse を呼び出してスタックを反転させます。

  • 最後に print_it を呼び出し、反転後のスタックの内容をコンソールに出力します。


  1. 再帰処理を使って数値が素数かどうかを判定するPythonプログラム

    再帰(リカーション)の手法を用いて、ある数値が素数かどうかを判定したい場合、判定用の関数を定義し、while 条件を組み合わせて処理を実装します。再帰とは、大きな問題を小さな部分問題に分割してそれぞれの結果を計算し、それらを組み合わせることで全体の解を導き出す手法です。素数判定のように「同じ処理を条件が満たされるまで繰り返す」ケースに適しています。そもそも素数とは、1とその数自身以外に正の約数を持たない、2以上の自然数のことです。たとえば 2、3、5、7、11 などが該当します。サンプルコード以下に実際の実装例を示します。def check_prime(my_num, my_val = Non

  2. Pythonで文字列を逆順にする方法を徹底解説!初心者向け5つの実装テクニック

    Pythonには、文字列を逆順に並べ替えるための組み込み関数が用意されていません。そのため、文字列を反転させたい場合は、自分でロジックを実装する必要があります。本記事では、Pythonで文字列を逆順にする代表的な5つの方法を、コード例とともにわかりやすく解説します。それぞれの特徴やパフォーマンスの違いも紹介するので、目的に合った手法を選ぶ参考にしてください。方法1:forループを使うこの方法の基本的な考え方は、文字列の最後のインデックスから0番目のインデックスへ向かって逆方向にループ処理を行うことです。各イテレーションで文字列の文字を取り出し、新しい文字列の末尾に追加していくことで、ループ終了