【Java入門】フィボナッチ数列をN項まで表示するプログラムの書き方
この記事では、指定した項数Nまでのフィボナッチ数列を表示するJavaプログラムの書き方を解説します。フィボナッチ数列とは、「直前の2つの数の和」が次の数になるという規則性を持つ数列のことです。
フィボナッチ数列の基本
フィボナッチ数列は、直前の2つの数を足し合わせることで次の数を順番に生成していきます。数列の始まりは2つの初期値 F0 と F1 で決まり、一般的には「0, 1」または「1, 1」の組み合わせが使われます。
数列の一般項は次の式で表されます。
Fn = Fn-1 + Fn-2
この式に従うと、フィボナッチ数列は次のようになります。
F8 = 0 1 1 2 3 5 8 13
また、初期値を「1, 1」とした場合は、次のように始まります。
F8 = 1 1 2 3 5 8 13 21
入出力のイメージ
たとえば入力として「15」を与えた場合、プログラムは次のような出力を返します。
入力値 : 15
15項目までのフィボナッチ数列: 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
アルゴリズム
フィボナッチ数列を表示するための手順は以下の通りです。
ステップ1 - 処理を開始する ステップ2 - 必要な変数を宣言する ステップ3 - ユーザーから値を入力してもらう、または値をあらかじめ定義しておく ステップ4 - forループで1からNまで繰り返し、直前の2つの数の和を現在のフィボナッチ数として計算・表示する ステップ5 - 結果を出力する ステップ6 - 処理を終了する
例1: ユーザーからの入力を受け取る場合
この例では、java.util.Scannerクラスを使って、ユーザーがコンソールから入力した値をもとにフィボナッチ数列を表示します。オンラインのJava実行環境でもそのまま試すことができます。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int my_input, term_1, term_2, term_3;
term_1 = 0;
term_2 = 1;
System.out.println("必要なパッケージがインポートされました");
Scanner my_scanner = new Scanner(System.in);
System.out.println("読み込み用オブジェクトが定義されました");
System.out.print("数値を入力してください : ");
my_input = my_scanner.nextInt();
System.out.println(my_input + "項目までのフィボナッチ数列:");
for (int i = 1; i <= my_input; ++i) {
System.out.print(term_1 + " ");
term_3 = term_1 + term_2;
term_1 = term_2;
term_2 = term_3;
}
}
}
実行結果
必要なパッケージがインポートされました 読み込み用オブジェクトが定義されました 数値を入力してください : 15 15項目までのフィボナッチ数列: 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
例2: 値をあらかじめ定義しておく場合
この例では、表示したい項数をプログラム内で直接定義し、その値を使ってフィボナッチ数列をコンソールに出力します。
public class Main {
public static void main(String[] args) {
int my_input, term_1, term_2, term_3;
my_input = 15;
term_1 = 0;
term_2 = 1;
System.out.println("項数は " + my_input + " に設定されています");
System.out.println(my_input + "項目までのフィボナッチ数列:");
for (int i = 1; i <= my_input; ++i) {
System.out.print(term_1 + " ");
term_3 = term_1 + term_2;
term_1 = term_2;
term_2 = term_3;
}
}
}
実行結果
項数は 15 に設定されています 15項目までのフィボナッチ数列: 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
プログラムのポイント
このプログラムの核となるのは、forループ内の次の3行です。
- term_3 = term_1 + term_2; … 直前の2つの項の和を計算し、次のフィボナッチ数を求めます。
- term_1 = term_2; … 2つ前の項を1つ前の位置へ移し替えます。
- term_2 = term_3; … 新しく計算した項を最新の項として保持します。
このように「値をずらしながら更新していく」処理を繰り返すことで、配列を使わずにフィボナッチ数列を効率よく生成できます。計算量はO(N)、必要なメモリも変数3個分だけで済むため、非常にシンプルで効率的な実装といえます。初心者がループ処理と変数の扱いを学ぶ題材としても最適です。
-
Java 9のJShellでフィボナッチ数列を実装する方法を解説
JShellとは? JShellは、Java 9で導入されたJavaシェルツールです。Javaコードを入力すると、その結果を即座に表示してくれるため、コードの動作確認や学習に非常に便利なツールとなっています。 JShellはREPL(Read-Evaluate-Print-Loop:読み込み・評価・出力・ループ)と呼ばれる仕組みを採用しており、コマンドラインから直接実行できます。クラスやmainメソッドを定義しなくても、単独の文や式を手軽に試せるのが大きな特徴です。 フィボナッチ数列とは フィボナッチ数列とは、「各項が直前の2つの数の和」という規則で構成される数列のことです。具体的には以下の
-
Javaで回文を判定するプログラムの書き方【数値・文字列の実例付き】
回文(パリンドローム)とは、逆から読んでも同じになる文字列や数値のことです。たとえば、121、313、525 といった数値や、「aba」「wow」のような文字列が回文に該当します。この記事では、Javaを使って回文を判定する方法を、数値の場合と文字列の場合の2つのパターンに分けて、サンプルコードと実行結果とともにわかりやすく解説します。回文数をチェックする方法数値が回文かどうかを判定するには、元の数値を1桁ずつ取り出して逆順に組み立て直し、元の値と比較します。具体的には、剰余演算(%10)で末尾の桁を取り出し、それを結果変数に10倍しながら加算していくことで反転した数値を作れます。サンプルコー