Javaプログラミング学習サイト ゆるゆるプログラミング

2021/03/09 公開

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

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

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

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

で定義されます。

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

Fibonacchi3.java ← クリックしてダウンロードページに移動
001:    public class Fibonacchi3 {
002:    	// フィボナッチ数列を配列で戻す
003:    	static int[] fibonacchi( int n )
004:    	{
005:    		// n<1でnullを戻す
006:    		if ( 1 > n )
007:    			return null;
008:    		// 配列を作成する
009:    		int[] fn = new int[ n ];
010:    
011:    		// フィボナッチ数列を配列に格納
012:    		switch ( n ) {
013:    			case 1:
014:    				// n=1
015:    				fn[ 0 ] = 1;
016:    				break;
017:    			case 2:
018:    				// n=2
019:    				fn[ 0 ] = 1;
020:    				fn[ 1 ] = 1;
021:    				break;
022:    			default:
023:    				// n>2
024:    				fn[ 0 ] = 1;
025:    				fn[ 1 ] = 1;
026:    				for ( int i = 2; i < n; i++ ) {
027:    					fn[ i ] = fn[ i - 2 ] + fn[ i - 1 ];
028:    				}
029:    				break;
030:    		}
031:    
032:    		// 配列を戻す
033:    		return fn;
034:    	}
035:    
036:    
037:    	// メイン
038:    	public static void main(String[] args) {
039:    		// フィボナッチ数列を格納する配列
040:    		int[] fn;
041:    
042:    		// F10の計算
043:    		int n = 10;
044:    		fn = fibonacchi( n );
045:    
046:    		// 結果を出力
047:    		for ( int i = 0; i < n; i++ )
048:    			System.out.println( fn[ i ] );
049:    	}
050:    }

Fibonacchi3を実行

C:\talavax\javasample>java Fibonacchi3

n=5フィボナッチ数列を出力します。

Fibonacchi3.javaの出力結果

1
1
2
3
5
8
13
21
34
55

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

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

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

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

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

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

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

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

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

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]を代入しています。これは、以下の式をコード化したものです。

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

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

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

以上です。

■関連コンテンツ

フィボナッチ数列 フィボナッチ数列
フィボナッチ数列(再帰) フィボナッチ数列
数学関数について 数学関数について解説
黄金比 最も美しい比率
黄金角 ヒマワリの種の配置?
値のコンソール表示 print()、println()とは?
メソッド メソッドについて解説
ウサギの増え方?-画像

ウサギ算

ウサギ算について解説しています。1対のウサギが1ヶ月毎に1対のウサギを産んでいく場合に、数が月後にウサギの対の数がいくつになるかを計算するものです。

四則演算(足し算/引き算/掛け算/割り算)について-画像

計算結果の表示

足し算(加法)/引き算(減法)/掛け算(乗法)/割り算(除法)の使い方を説明

繰り返し処理に使用するfor文について解説-画像

for文

繰り返し処理に使用するfor文をJavaのソースコードを使って説明しています。

■新着情報

2021.06.18 変数の初期値 変数に値を代入しないで計算
2021.05.28 短針と長針の角度 短針と長針の角度は?
2021.05.19 各位(くらい)を求める 1の位の値は?10の位は?

■広告

 

 

 

 

 

 

 

 

Topへ