再帰を使わずにフィボナッチ数列を生成するPythonプログラムの書き方
再帰(リカーシブ)処理を使わずにフィボナッチ数列を求めたい場合、ユーザーから初期値と項数を入力として受け取り、whileループを使って数列を順番に計算していく方法が有効です。
フィボナッチ数列とは、「直前の2つの数の和が次の数になる」という規則性を持つ数列のことです。再帰関数を使う方法はコードがシンプルな反面、同じ計算を何度も繰り返すため、項数が増えると処理速度が低下します。一方、ループによる反復処理では各項を一度だけ計算するため、効率よく数列を生成できます。
サンプルコード
以下に、whileループを使ってフィボナッチ数列を表示するプログラムの例を示します。
first_num = int(input("Enter the first number of the fibonacci series... "))
second_num = int(input("Enter the second number of the fibonacci series... "))
num_of_terms = int(input("Enter the number of terms... "))
print(first_num,second_num)
print("The numbers in fibonacci series are : ")
while(num_of_terms-2):
third_num = first_num + second_num
first_num=second_num
second_num=third_num
print(third_num)
num_of_terms=num_of_terms-1実行結果
Enter the first number of the fibonacci series... 2 Enter the second number of the fibonacci series... 8 Enter the number of terms... 8 2 8 The numbers in fibonacci series are : 10 18 28 46 74 120
プログラムの解説
- 最初の数値と2番目の数値を、それぞれユーザーからの入力として受け取ります。
- 表示する項数も同様に、ユーザーから入力として受け取ります。
- まず、入力された最初の数値と2番目の数値をコンソールに出力します。
- ここでwhileループが開始され、ループ内で以下の処理が繰り返されます。
- 最初の数値と2番目の数値を加算し、その結果を3番目の数値に代入します。
- 2番目の数値を最初の数値に代入し、3番目の数値を2番目の数値に代入することで、基準となる2つの値を1つずつ先へずらします。
- 計算結果である3番目の数値をコンソールに出力します。
- 残りの項数を1つ減らし、項数が0になるまでこの一連の流れを繰り返します。
まとめ
このように、whileループによる反復処理を利用すれば、再帰呼び出しに頼ることなく、シンプルかつ効率的にフィボナッチ数列を生成できます。特に項数が多くなる場合には、再帰方式と比べて計算量を大幅に抑えられる点が大きなメリットです。
-
【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つの関数
-
ループを使わずに数列を出力する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に