今回はJavaを使って、数学的に有名な数列であるフィボナッチ数列をプログラミングで作りたいと思います。
また、フィボナッチ数列と黄金比との比較もプログラミングで行ってみます。
- フィボナッチ数列の概要
- Javaでのフィボナッチ数列の出力
- フィボナッチ数列と黄金比の比較
フィボナッチ数列とは
フィボナッチ数列は以下のような数列のことを指します。
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
この数列は最初は「0」、2番目に「1」を定義して、3番目からは「1つ前と2つ前の数字を足した数字」を入れた数列です。
ここで、フィボナッチ数列の隣同士の数字の比は、数列の後になればなるほど黄金比と呼ばれる

に近似されるという特徴があります。
Javaでフィボナッチ数列を出力する
配列とfor文を使ってフィボナッチ数列を10番目まで出力させてみましょう。今回、配列を出力させるのにArraysクラス
のtoStringメソッド
を使っています。
サンプルコードと出力結果
サンプルコードFiboTestクラス
とその実行結果を以下に示します。
package bg;
import java.util.Arrays;
public class FiboTest {
public static void main(String[] args) {
FiboTest fiboTest = new FiboTest();
int[] Fibo;
// 10番目まで求めたいので10を代入
int num = 10;
Fibo = fiboTest.getFibonacciSequence(num);
// Fiboを出力する
System.out.println(Arrays.toString(Fibo));
}
int[] getFibonacciSequence(int num) {
int[] Fibo = new int[num];
// 配列の1番目と2番目に0と1を格納する
Fibo[0] = 0;
Fibo[1] = 1;
// 3番目以降に1つ前と2つ前の数字を足した数字を入れる
for (int i = 2; i < num; i++) {
Fibo[i] = Fibo[i - 1] + Fibo[i - 2];
}
return Fibo;
}
}
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
プログラム上でも上と同じ数列が出力されたことがわかります。
フィボナッチ数列と黄金比の近似性を調べる
次にフィボナッチ数列の比と黄金比との差を求めてみましょう。sqrtメソッド
を使って黄金比を出し、指定した数列の場所の比との差を求めます。
sqrtクラス
の使用方法については以下の記事にまとめています。
サンプルコードと出力結果
サンプルコードFibogoldTestクラス
を以下に示します。先ほど作成したFiboTestクラス
を継承しています。
package bg;
import java.util.Scanner;
public class FibogoldTest extends FiboTest {
public static void main(String[] args) {
// 比較したい数列の場所を入力する
Scanner scan = new Scanner(System.in);
System.out.println("整数を入力");
int num = scan.nextInt();
scan.close();
FibogoldTest fibogoldTest = new FibogoldTest();
// 配列Fiboを宣言し、数列を取得
int[] Fibo;
Fibo = fibogoldTest.getFibonacciSequence(num);
// 黄金比を求める
double gold = (1 + Math.sqrt(5)) / 2;
// フィボナッチ数列の比と黄金比との差を出す
System.out.println("黄金比との差:" + (gold - (Fibo[num - 1] / Fibo[num - 2])));
}
}
サンプルコードの出力結果を以下に示します。今回は比較のため、「5」「10」の2回出力結果を出しました。
整数を入力
5
黄金比との差:0.1180339887498949
整数を入力
10
黄金比との差:-0.0010136302977241662
出力結果を見ると、入力した数字が大きい程、黄金比との差が小さくなることがわかります。
まとめ
今回はJavaプログラミングでフィボナッチ数列を出力してみました。
フィボナッチ数列は自然界にも現れることの多い不思議な数列です。「花びらの枚数」だったり「気管支の枝分かれ」にもフィボナッチ数列と関わりがあるようです。プログラミングでフィボナッチ数列を表現する問題は、プログラミング初級者向けに良く見られるのでまとめてみました。以上で記事を終わりにします。