今回は受講生(A氏)作成のお題をコーディングしてみよう。言語はJavaだ。
お題
フィボナッチ数列を30個(5個ずつで改行)表示してみよう。
※フィボナッチ数列とは
・1,1,2,3,5,8,13,21,34,55………のように無限に続く数列のこと。
・一番目の数は1、二番目の数も1。
・三番目の数は1+1で2
・四番目の数は1+2で3
・五番目の数は2+3で5
・上記のように、三番目以降の数は、自分の一つ前と二つ前の数字の和になる。
実行例
1,1,2,3,5,
8,13,21,34,55,
89,144,233,377,610,
987,1597,2584,4181,6765,
10946,17711,28657,46368,75025,
121393,196418,317811,514229,832040,
Let’s challenge!
日常生活をしている限りフィボナッチ数列が出てくる局面はほとんどないが、プログラミングにおいてはちょくちょく取り上げられる。これを機会に知っておこう。またフィボナッチ数列自体も調べてみるととても面白い。以下のリンクを一読しておくとよいだろう。
○自然界と人体の神秘 ~フィボナッチ数列、黄金比から垣間見える~
さて、フィボナッチ数列のことも学んだので実際にコーディングしてみよう!
(解答例は明日)
解答例
public class Fibo{
public static void main(String[] args){
int fibo=1,n1=0,n2=1;
for(int i=1;i<=30;i++){
//i番目のfiboを表示
System.out.print(fibo +",");
//次のfiboを計算
fibo=n1+n2;
//過去2回の値を計算
n1=n2;
n2=fibo;
//5行ごとに改行
if(i%5 == 0){
System.out.println();
}
}
}
}
ポイント解説
i番目のフィボナッチ数をfibo,過去2回の値をn1とn2で管理する。
今回30個とループの回数が決まっているので用いるループはfor文
ループを回しながら特定のタイミングで改行を入れる処理はよく出てくるのでここで覚えてしまおう。
こんな書き方も。。。
今回は可読性を重視してコーディングしたがfor文の3つの部屋の内、最初の部屋と最後の部屋は,を使って複数記述できるので可読性を無視すれば以下のようにもかける。
public class Fibo{
public static void main(String[] args){
for(int i=1,fibo=1,n1=0,n2=1;i<=30;i++,fibo=n1+n2,n1=n2,n2=fibo){
System.out.print(fibo +",");
if(i%5 == 0){
System.out.println();
}
}
}
}
実際の業務では可読性、保守性が何よりも優先されるためこのような記述は推奨されないが文法的にはこのようにも書けるということも知っておこう。
コメント