質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

3760閲覧

フィボナッチ数列で表示したい

aaaajj

総合スコア5

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/07/16 09:41

編集2020/07/17 03:04

40までの表示にしたい

1,1から始まり、40までのフィボナッチ数列を求めてint型の配列に代入し、表示したい。

発生している問題・エラーメッセージ

数値が40以下までで表示したいです。

該当のソースコード

java

1public static void main(String[] args) { 2 for (int n = 1; n < 10; n++) { 3 4 System.out.println(fibonacci(n)); 5 6 } 7 } 8 9 private static int fibonacci(int n) { 10 11 if (n == 0) { 12 return 0; 13 } 14 15 if (n == 1) { 16 return 1; 17 } 18 19 return fibonacci(n - 1) + fibonacci(n - 2); 20 } 21} 22

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/07/16 10:16

>コードで40以下に この「コードで」とはどういう意味でしょうか。
aaaajj

2020/07/17 01:25

ご返信ありがとうございます。 数値が40以下にという意味です。
guest

回答3

0

純粋関数型

質問の再帰関数は副作用のない純粋関数です。しかし再帰させると計算量が増えて非効率なので、同じ純粋性を保ちながらイテレートします。int[]を使うやり方は検索するとたくさんヒットします。Java 9以上でStreamのtakeWhile()がサポートされています。

Java

1static Integer[] fibonacci09(final int limit) { 2 return Stream.iterate( 3 new int[] {0,1}, t -> new int[]{t[1],t[0]+t[1]}) 4 .map(t -> t[1]) 5 .takeWhile(v -> v <= limit) 6 .collect(Collectors.toList()) 7 .toArray(new Integer[0]); 8 }

使い方は以下のとおり。

Java

1Integer[] result = fibonacci09(40); 2System.out.println(Arrays.asList(result));

ついでに、状態を持つ例。

Java

1static Integer[] fibonacci(final int limit) { 2 Supplier<UnaryOperator<Integer>> genfib = () -> { 3 int[] prev = new int[1]; // closure 4 return x -> { 5 int next = prev[0] + x; 6 prev[0] = x; 7 return next; 8 }; 9 }; 10 return Stream.iterate(1, genfib.get()) 11 .takeWhile(v -> v <= limit) 12 .collect(Collectors.toList()) 13 .toArray(new Integer[0]); 14}

投稿2020/07/17 12:54

編集2020/07/17 22:54
xebme

総合スコア1090

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Java

1class Test { 2 public static void main(String[] args) { 3 int[] a = new int[41]; 4 a[0] = 0; a[1] = 1; 5 for (int i = 2; i <= 40; i++) 6 a[i] = a[i-1] + a[i-2]; 7 for (int i = 1; i <= 40; i++) 8 System.out.println("fibonacci(" + i + ") = " +a[i]); 9 } 10}

追記

Java

1class Test { 2 static final int N = 40; 3 4 public static void main(String[] args) { 5 int[] a = new int[N + 2]; 6 a[1] = 1; 7 int n; 8 for (n = 2; n < a.length; n++) { 9 a[n] = a[n-1] + a[n-2]; 10 if (a[n] > N) break; 11 } 12 for (int i = 1; i < n; i++) 13 System.out.println("fibonacci(" + i + ") = " +a[i]); 14 } 15}

投稿2020/07/16 15:20

編集2020/07/17 19:40
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aaaajj

2020/07/17 01:34

すみませんこちらの説明不足で、数値が40以下という意味でした。
guest

0

こんな感じになります。

java

1 int f[]=new int[41]; 2 for(int i=0;i<f.length;i++){ 3 f[i]=fibonacci(i); 4 System.out.println(""+i+":"+f[i]); 5 }

投稿2020/07/16 12:33

Kaleidoscope

総合スコア257

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aaaajj

2020/07/17 01:36

すみませんこちらの説明不足で、数値が40以下という意味でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問