フィボナッチ数列
あるあるのフィボナッチ数列について.
ご存じだとは思いますが,一応説明を.
簡単に言うと,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個で止まってしまう….
うーん…
とりあえずの備忘録として.
これから,勉強して改善….
が,お詳しい方いたら,是非ともコメントお願いします….