2021.03.09

数学

フィボナッチ数列(配列)

フィボナッチ数列(配列)

フィボナッチ数列は、イタリアの数学者レオナルド・フィボナッチが考えた「ウサギ算」から導かれる数列です。

ここでは、配列を使ってフィボナッチ数列を求めるプログラムを紹介します。

フィボナッチ数列は、n番目のフィボナッチ数をFnで表すと、Fnは再帰的に

  F0 = 0

  F1 = 1

  Fn+2 = Fn + Fn+1 (n≧0)

で定義されます。

Javaソースコード

この式を配列使って計算するプログラムを作成しました。以下がそのソースコードです。

Fibonacchi3.java

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
public class Fibonacchi3 {
	// フィボナッチ数列を配列で戻す
	static int[] fibonacchi( int n )
	{
		// n<1でnullを戻す
		if ( 1 > n )
			return null;
		// 配列を作成する
		int[] fn = new int[ n ];

		// フィボナッチ数列を配列に格納
		switch ( n ) {
			case 1:
				// n=1
				fn[ 0 ] = 1;
				break;
			case 2:
				// n=2
				fn[ 0 ] = 1;
				fn[ 1 ] = 1;
				break;
			default:
				// n>2
				fn[ 0 ] = 1;
				fn[ 1 ] = 1;
				for ( int i = 2; i < n; i++ ) {
					fn[ i ] = fn[ i - 2 ] + fn[ i - 1 ];
				}
				break;
		}

		// 配列を戻す
		return fn;
	}


	// メイン
	public static void main(String[] args) {
		// フィボナッチ数列を格納する配列
		int[] fn;

		// F10の計算
		int n = 10;
		fn = fibonacchi( n );

		// 結果を出力
		for ( int i = 0; i < n; i++ )
			System.out.println( fn[ i ] );
	}
}

実行結果

コンパイル ソースコードが「ANSI」の場合

C:\talavax\javasample>javac -encoding sjis Fibonacchi3.java

コンパイル ソースコードが「UTF-8」の場合

C:\talavax\javasample>javac Fibonacchi3.java

Fibonacchi3を実行

C:\talavax\javasample>java Fibonacchi3

n=0から10のフィボナッチ数を表示します。

出力結果

0
1
1
2
3
5
8
13
21
34
55

このソースでは、n=1~10のフィボナッチ数を出力しています。

Javaのソースコード解説

ここからは、フィボナッチ数列配列に格納するソースコードを上から順番に解説していきます。

002
003
	// フィボナッチ数列を配列で戻す
	static int[] fibonacchi( int n )

フィボナッチ数を計算するfibonacchiメソッドです。変数nに値を渡すとフィボナッチ数列を格納したint型配列を戻します。

005
006
007
		// n<1でnullを戻す
		if ( 1 > n )
			return null;

nが1未満の場合はnullを戻しています。

008
009
		// 配列を作成する
		int[] fn = new int[ n ];

n個のint型配列を作成しています。

011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
		// フィボナッチ数列を配列に格納
		switch ( n ) {
			case 1:
				// n=1
				fn[ 0 ] = 1;
				break;
			case 2:
				// n=2
				fn[ 0 ] = 1;
				fn[ 1 ] = 1;
				break;
			default:
				// n>2
				fn[ 0 ] = 1;
				fn[ 1 ] = 1;
				for ( int i = 2; i < n; i++ ) {
					fn[ i ] = fn[ i - 2 ] + fn[ i - 1 ];
				}
				break;
		}

switch文でn=1、n=2、n>3(default)で処理を変えています。

n=1の場合、fn[0]に1を代入しています。これで数列の作成は終了です。

n=2の場合、fn[0]とfn[1]に1を代入しています。これで数列の作成は終了です。

n>2(default)の場合、fn[0]とfn[1]に1を代入して、以下の処理を実行しています。

for文変数iを2からn-1まで1ずつ変化させるループを作成し、f[i]にf[i-2]+fn[i-1]を代入しています。これは、以下の式をコード化したものです。

032
033
		// 配列を戻す
		return fn;

return文配列fnを戻してメソッド終了です。

以上です。

前のコンテンツ

再帰を使ったフィボナッチ数列を出力するプログラムを作ってみませんか?

2017.01.23

関連コンテンツ

数学に関係するJavaのメソッドやソースコードなどを紹介しています。

2022.10.25

自然界の現象に数多く出現するフィボナッチ数列のプログラムを作ってみませんか?

2017.01.23

配列を使ったフィボナッチ数列を出力するプログラムを作ってみませんか?

2021.03.09

自然界に現れる黄金角について解説しています。興味のある方は是非ご覧ください。

2020.03.23

デザインなどに使われる最も美しい比率について解説しています。

2020.03.23

長方形を使って黄金比を計算する方法を説明しています。

2023.02.15

長方形の分割で、白銀比を計算する方法を説明しています。

2023.11.06

繰り返し処理を使ったJavaのソースコードサンプルを紹介しています。

2020.03.23

基本的な計算である足し算(加法)/引き算(減法)/掛け算(乗法)/割り算(除法)を行うプログラム作成。

2020.03.23

画像フォーマット形式・色・大きさ・傾きなどの変更、特定の図形(文字・記号など)を見つけたり、取り出したりする画像処理について詳しく解説。

2015.11.29

日本で使われてきた伝統文様「和柄」について解説しています。

2022.07.27

プログラミング、ITに関する用語をまとめています。

2022.10.17

条件式を判断して処理を分岐する方法を詳しく説明しています。

2023.03.20

メソッドを抜けるときに使用するreturn文について説明しています。

2020.03.20

式の値によって処理を分岐する方法を詳しく解説しています。

2016.08.04

変数やクラスに格納されている値をコンソール出力する方法は?

2020.03.23

プログラムの最初に実行されるメソッドは?

2022.12.13

プログラミングで使う変数って何?

2020.03.23

Javaのプログラムを書いてみませんか?プログラムの書き方をくわしく説明しています。

2020.03.23

「Javaソースコード」から実行可能な「オブジェクトコード」に変換する方法をくわしく説明しています。

2020.03.23

再帰を使ったフィボナッチ数列を出力するプログラムを作ってみませんか?

2017.01.23

ウサギ算(rabbit arithmetic)って何?

2017.02.23

同じ型の変数(データ)を複数個まとめて管理するデータの持ちかたがあります。これが配列です。くわしくは、記事をご覧ください。

2016.01.14

for文で変数名iがよく使われる理由について説明しています。興味のある方は是非。

2022.08.29

メソッドの定義方法を詳しく解説しています。Javaのサンプルソースコードを使った説明もあります。

2020.03.23

処理を繰り返すために使用するfor文について解説しています。

2020.03.23

繰り返し処理の作り方を解説しています。

2016.03.02

広告