フィボナッチ数列

あるあるのフィボナッチ数列について.
ご存じだとは思いますが,一応説明を.

簡単に言うと,1つ前の項と2つ前の項を足していく数列.

a1 = 1 , a2 = 1 , a(n) = a(n-1) + a(n-2)

要するに,

a1 = 1
a2 = 1
a3 = a1 + a2 = 1 + 1 = 2
a4 = a2 + a3 = 1 + 2 = 3
a5 = a3 + a4 = 2 + 3 = 5
a6 = a4 + a5 = 3 + 5 = 8
・・・

のように数列が進んでいく.

このフィボナッチ数列について以下の問を.

フィボナッチ数列のうち,各桁の数字を足した数で割り切れる数を,小さい方から5個求めてください.
「プログラマ脳を鍛える数学パズル」 著者:増井敏克

フィボナッチ数列を再帰使って表したパターンがこれ.

import java.util.*;
import java.lang.*;
import java.io.*;

public class Fibonacci{
 public static void main (String[] args){
   int count = 0;
   int n = 1;
   while(count <= 5){
     int sum = 0;
     String s = String.valueOf(fib(n));
     String ar[] = s.split("");

     int num[] = new int[ar.length];
     for(int j =0; j < ar.length; j++){
       num[j] = Integer.parseInt(ar[j]);
     }

     for(int i=0; i < num.length; i++){
       sum += num[i];
     }

     if(fib(n)%sum == 0){
       count++;
     }
     n++ ;
}
}
 private static int fib(int n) {
   if(n==1){
     return 13;
   }else if(n==2){
     return 21;
   }else{
      return fib(n-1)+fib(n-2);
    }
 }
}
Exception in thread "main" java.lang.NumberFormatException: For input string: "-"
	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
	at java.base/java.lang.Integer.parseInt(Integer.java:648)
	at java.base/java.lang.Integer.parseInt(Integer.java:776)
	at Fibonacci.main(Fibonacci.java:16)

はい出ました.エラー.

とりあえず認識としては,再帰を使ったことで,
毎回,fib(n)を使って呼び出すとなると,問題が発生するのかなと.

ということで,再帰を使わないやり方で.

public class Fibonacci2{
 public static void main (String[] args){
   int a = 5;
   int b = 8;
   int count = 0;
   int n = 1;
   while(count < 6){
     int c = a + b;
     int sum = 0;
     String s = String.valueOf(c);
     String ar[] = s.split("");

     int num[] = new int[ar.length];
     for(int j =0; j < ar.length; j++){
       num[j] = Integer.parseInt(ar[j]);
     }

     for(int i=0; i < num.length; i++){
       sum += num[i];
     }

     if(c%sum == 0){
       count++;
       System.out.println(c);
     }
     n++ ;
     a = b;
     b = c;
}
}

}
21
144
2584
14930352
Exception in thread "main" java.lang.NumberFormatException: For input string: "-"
	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
	at java.base/java.lang.Integer.parseInt(Integer.java:648)
	at java.base/java.lang.Integer.parseInt(Integer.java:776)
	at Fibonacci2.main(Fibonacci2.java:15)

はい!結果出ました.

いや…?
…ん?あれ…
出てるようで出てない.

いや,途中までは確かに正しい結果が出ているけれど
何故か4個で止まってしまう….

うーん…

とりあえずの備忘録として.

これから,勉強して改善….

が,お詳しい方いたら,是非ともコメントお願いします….


この記事が気に入ったらサポートをしてみませんか?