0

私はJavaを学び、配列を練習しています。私は実験としてフィボナッチ数列を生成することにしましたが、(配列とループを使用して)系列を生成するより簡単な方法があるかもしれないと思わずにはいられません。

何かご意見は?

//Generate a Fibonacci series
public class Array {

   public static void main(String[] args) {
      // An array to store the values
      int[] intArray = new int[20];

      // starting values for the sequence
      intArray[0] = 0;
      intArray[1] = 1;

      //display the first values
      System.out.println("array["+(0)+"] = "+intArray[0]);
      System.out.println("array["+(1)+"] = "+intArray[1]);

      //generate the fibonnacci progression with a loop
      for (int count=2;count<intArray.length;count++){ 
      intArray[count] = intArray[(count-1)]+intArray[(count-2)];
      System.out.println("array["+(count)+"] = "+intArray[count]);  
   }
}
4

6 に答える 6

1

これがアレイレスのソリューションです。使用されるのは4int秒のみです。

public class Fibonacci
{
   public static void main(String[] args)
   {
      int first = 0;
      int second = 1;
      int sum;
      for (int i = 0; i < 20; i++)
      {
         sum = first + second;
         System.out.println("iteration " + i + ": " + sum);
         first = second;
         second = sum;
      }
   }
}

出力:

iteration 0: 1
iteration 1: 2
iteration 2: 3
iteration 3: 5
iteration 4: 8
iteration 5: 13
iteration 6: 21
iteration 7: 34
iteration 8: 55
iteration 9: 89
iteration 10: 144
iteration 11: 233
iteration 12: 377
iteration 13: 610
iteration 14: 987
iteration 15: 1597
iteration 16: 2584
iteration 17: 4181
iteration 18: 6765
iteration 19: 10946
于 2013-03-16T00:39:42.750 に答える
1

あなたは再帰的な答えを探すべきです、このサイトにはそれらの多くがあります。例えば。フィボナッチ数列-再帰的総和

于 2013-03-16T00:29:33.453 に答える
0

すべての値を配列に格納する場合は、これまでの方法がこの問題を解決するための最もエレガントで効率的な方法だと思います。ただし、値を保存する必要はありません。

見た目には、カウント変数と数字の0と1を囲む丸括弧は不要であり、コードを読むのが非常に面倒になります。

于 2013-03-16T00:39:59.593 に答える
0

それは私ができた最短の時間です:

public static void main(String[] args) {
    int a = 0, b = 1;
    long length = 20;
    System.out.println(a);
    System.out.println(b);
    while (--length >= 0)
        System.out.println((a = (b = a + b) - a) * 0 + b);
}

与える:

0 1 1 2 3 5 8 13 .. ..

于 2013-03-16T02:44:09.770 に答える
0

このようなソリューションをテストしたことがありますか?Moivre-BinetFormulaを使用しています。長いタイプでは、n>71の精度エラーが発生します。

public static void main(String[] args) {
   for (int i = 0; i < 20; i++) {
      System.out.println(getFibonacci(i));
   }
}

private static int getFibonacci(int n) {
   return (int) ((1D / Math.sqrt(5D)) * ((Math.pow(((1D + Math.sqrt(5D)) / 2D), n)) - Math.pow(((1D - Math.sqrt(5D)) / 2D), n)));
}

nが高いほど、ナイーブまたは再帰的なアルゴリズムが遅くなるか、メモリが不足します。次の再帰的な例は、n=14832まで機能します。現在のJVM設定で保留になっている可能性があります。

static final Map<Integer,BigInteger> FIBONACCI_RESULTS = new HashMap<>();


private static BigInteger getFibonacciRecursive(final int n) {
   return ((n == 1) || (n == 2)) ? BigInteger.ONE : fetchResult(n);
}

private static BigInteger fetchResult(final int n) {
   BigInteger result;
   System.out.println("n := "+n);
   if (FIBONACCI_RESULTS.containsKey(n)) {
      result = FIBONACCI_RESULTS.get(n);
   } else {
      result = getFibonacciRecursive(n - 1).add(getFibonacciRecursive(n - 2));
      FIBONACCI_RESULTS.put(n, result);
   }
   return result;
}
于 2013-03-16T18:51:16.130 に答える
0

私が作ることができるフィボナッチ数列を生成するための最もエレガントでよく構造化されたプログラムはこれです:

import java.util.Scanner;

public class fibon{

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("How many times shall we generate the fibonacci series?");
        int max = scan.nextInt();
        scan.close();
        fibgen(max);
    }
    public static void fibgen(int max) {
        int f = 0, s = 1;
        for(int i = 0; i <= max; i++) {
            f += s;
            s = f - s;
            System.out.println(s + " ");
        }

    }
}
于 2014-09-22T16:22:48.957 に答える