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

【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個分だけで済むため、非常にシンプルで効率的な実装といえます。初心者がループ処理と変数の扱いを学ぶ題材としても最適です。

  1. Java 9のJShellでフィボナッチ数列を実装する方法を解説

    JShellとは? JShellは、Java 9で導入されたJavaシェルツールです。Javaコードを入力すると、その結果を即座に表示してくれるため、コードの動作確認や学習に非常に便利なツールとなっています。 JShellはREPL(Read-Evaluate-Print-Loop:読み込み・評価・出力・ループ)と呼ばれる仕組みを採用しており、コマンドラインから直接実行できます。クラスやmainメソッドを定義しなくても、単独の文や式を手軽に試せるのが大きな特徴です。 フィボナッチ数列とは フィボナッチ数列とは、「各項が直前の2つの数の和」という規則で構成される数列のことです。具体的には以下の

  2. Javaで回文を判定するプログラムの書き方【数値・文字列の実例付き】

    回文(パリンドローム)とは、逆から読んでも同じになる文字列や数値のことです。たとえば、121、313、525 といった数値や、「aba」「wow」のような文字列が回文に該当します。この記事では、Javaを使って回文を判定する方法を、数値の場合と文字列の場合の2つのパターンに分けて、サンプルコードと実行結果とともにわかりやすく解説します。回文数をチェックする方法数値が回文かどうかを判定するには、元の数値を1桁ずつ取り出して逆順に組み立て直し、元の値と比較します。具体的には、剰余演算(%10)で末尾の桁を取り出し、それを結果変数に10倍しながら加算していくことで反転した数値を作れます。サンプルコー