-5

フィボナッチ数列関数用の Java プログラムを書きたいのですが、うまくいきません。誰か助けてください。

public static void main(String[] args)

{
    Scanner input = new Scanner(System.in);

    int x = input.nextInt();

    int e =fan(x);

            System.out.println(e);
    }

public static int fan(int e){ 
           int a =1;
           int b;
           int c = 0;

    for (int i=1; i<=e; i++) {
                b=c;
                c=b+a;
                a=b;
            }

        return c;


}

}
4

2 に答える 2

3

これは、大きな数に対して BigInteger を使用して実装されます。

public static String fan(int i) {
    BigInteger a = BigInteger.ZERO;
    BigInteger b = BigInteger.ONE;
    if(i==0) return a.toString();

    for (int f = 1; f < i; f++) {
        BigInteger temp = b;
        b = a.add(b);
        a = temp;
    }
    return b.toString();
}

public static void main(String[] args)

{
    Scanner input = new Scanner(System.in);

    int x = input.nextInt();

    String i = fan(x);

    System.out.println(i);
}
于 2013-11-14T12:52:48.593 に答える
0

フィボナッチ数列も再帰的に実装できます。この場合、次のようになります。

public int fibonacci(int n)  {
   if( (n == 0) || (n == 1) )
      return n;
   else
      return( fibonacci(n - 1) + fibonacci(n - 2) );
}

BigIntegers では次のようになります。

public BigInteger fibonacci(int n) {
   if (n == 0) return BigInteger.ZERO;
   if (n == 1) return BigInteger.ONE;
   return fibonacci(n - 1).add(fibonacci(n - 2));
}

明らかに反復アルゴリズムは再帰よりも高速です...

于 2013-11-14T13:28:29.653 に答える