【Python】ループを使わずに数列を出力する方法:再帰呼び出しを活用した実装
はじめに
本記事では、以下の問題に対する解決策について詳しく解説します。
問題の概要
2つの整数 N と K が与えられたとき、N が 0 より大きい間は N から K を引き続けます。そして N が 0 以下になったら、今度は元の値 N に戻るまで K を足していきます。
入力例
N = 10 K = 4
出力例
10 6 2 -2 2 6 10
アルゴリズムの考え方
- N が 0 より大きい間、関数を再帰的に呼び出し続けます(各呼び出しごとに N から K を減算します)。
- 数値が 0 以下になったら、元の値に戻るまで各呼び出しごとに K を加算します。
- 加算と減算は同じ1つの関数内で処理しますが、どちらの処理に切り替えるかを判定するために、ブール型の変数 flag を使用します。
Pythonでの実装例
def PrintNumber(N, Original, K, flag):
# 数値を出力
print(N, end=" ")
# 数値が0以下になった場合
if (N <= 0):
if (flag == 0):
flag = 1
else:
flag = 0
# 元の値に戻ったら再帰を終了
if (N == Original and (not(flag))):
return
# flag が真の場合は減算を継続
if (flag == True):
PrintNumber(N - K, Original, K, flag)
return
# flag が偽の場合は加算に切り替え
if (not(flag)):
PrintNumber(N + K, Original, K, flag)
return
N = 10
K = 4
PrintNumber(N, N, K, True)
実行結果
10 6 2 -2 2 6 10
コードのポイント
このプログラムの動作の鍵となるのは、変数 flag の状態管理です。flag が True の間は減算を続け、N が 0 以下になった時点で flag を反転させ、以降は加算処理に切り替えます。そして、N が元の値 Original に戻り、かつ flag が偽の状態になったときに再帰呼び出しを終了することで、無限ループを防いでいます。
なお、ここで扱うすべての変数はグローバル名前空間で宣言・管理されています。
まとめ
本記事では、Python 3.x において for 文や while 文などのループ構文を一切使わずに、再帰呼び出しとフラグ変数を組み合わせて数列を出力する方法を解説しました。「減算 → 0 以下で反転 → 加算」という一連の流れを、シンプルな再帰関数でエレガントに実現できることを確認できました。ループ処理と再帰処理の違いを理解する良い教材として、ぜひ参考にしてください。
-
ループを使わずに数列を出力するPythonプログラム|再帰とフラグで実現する方法
本記事では、for文やwhile文などのループ構文を一切使わずに数列を表示するという問題の解法について解説します。問題の定義問題: 2つの数値 N と K が与えられます。まずNが0より大きい間はNからKを繰り返し引き、Nが0以下(ゼロまたは負)になったら、今度は逆にKを足していきます。そして値が元の数値Nに戻った時点で処理を終了します。実行例N = 10K = 4出力: 10 6 2 -2 2 6 10アルゴリズムNが0より大きい間、関数を再帰的に呼び出し続けます。各呼び出しのたびにNからKを減算します。数値が0以下になったら加算モードに切り替え、各呼び出しごとにKを加算します。元の数値Nに
-
Pythonでループを使わずに再帰関数だけで数列を出力する方法
ある数 n が与えられたとき、for 文や while 文などのループ構文を一切使わずに、n から始めて 5 ずつ減算し 0(または負の値)に達した後、今度は 5 ずつ加算しながら再び n まで戻る数列を出力する方法を紹介します。この問題は再帰関数を使うことでエレガントに解決できます。 実行例 入力: n = 15 出力: 15 10 5 0 5 10 15 アルゴリズム ステップ1: 数値 n を受け取ります。 ステップ2: n に向かって戻る途中であり、すでに n に到達していれば処理を終了します。 ステップ3: 現在、0 または負の値へ向かって減算している段階かどうかを確認します。