2017.01.23
数学
フィボナッチ数列(再帰)
フィボナッチ数列は、イタリアの数学者レオナルド・フィボナッチが考えた「ウサギ算」から導かれる数列です。この数列は、自然界の現象に数多く出現し、ヒマワリの種の配列にもフィボナッチ数列の法則が働いているといわれています。それでは、フィボナッチ数列とはどうのようなものかを見ていきましょう。
0 1 1 2 3 5 8 13 21 34 …
n番目のフィボナッチ数をFnで表すと、Fnは再帰的に
F0 = 0
F1 = 1
Fn+2 = Fn + Fn+1 (n≧0)
で定義されます。
Javaソースコード
この式をJavaの再帰を使ってプログラムしたものが以下です。
Fibonacchi2.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
public class Fibonacchi2 { // 再帰を使ったフィボナッチ数の計算 static int fibonacchi( int n ) { // n=0で0を戻す if ( 0 == n ) return 0; // n=1で1を戻す if ( 1 == n ) return 1; // nが2以上でFn-1とFn-2を足す return fibonacchi( n - 1 ) + fibonacchi( n - 2 ); } // メイン public static void main(String[] args) { int n, fn; // F5の計算 n = 5; fn = fibonacchi( n ); System.out.println( "F" + n + "=" + fn ); // F10の計算 n = 10; fn = fibonacchi( n ); System.out.println( "F" + n + "=" + fn ); // F20の計算 n = 20; fn = fibonacchi( n ); System.out.println( "F" + n + "=" + fn ); } }
実行結果
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Fibonacchi2.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Fibonacchi2.java
Fibonacchi2を実行
C:\talavax\javasample>java Fibonacchi2
n=0から10のフィボナッチ数を表示します。
出力結果
F5=5 F10=55 F20=6765
Javaのソースコード解説
ここからは、このソースコードを上から順番に解説していきます。
003
static int fibonacchi( int n )
005 006 007
// n=0で0を戻す if ( 0 == n ) return 0;
nが0のとき、0を戻しています。
009 010 011
// n=1で1を戻す if ( 1 == n ) return 1;
nが1のとき、1を戻しています。
013 014
// nが2以上でFn-1とFn-2を足す return fibonacchi( n - 1 ) + fibonacchi( n - 2 );
018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035
// メイン public static void main(String[] args) { int n, fn; // F5の計算 n = 5; fn = fibonacchi( n ); System.out.println( "F" + n + "=" + fn ); // F10の計算 n = 10; fn = fibonacchi( n ); System.out.println( "F" + n + "=" + fn ); // F20の計算 n = 20; fn = fibonacchi( n ); System.out.println( "F" + n + "=" + fn );
fibonacchiメソッドに5、10、20を渡して結果を表示しています。
以上です。