-6

基本的に、0 から 100 までのフィボナッチ数を出力するより短い方法があるかどうかを知りたいです。

私が行ったことはおそらく非常に基本的なものですが、コードは次のとおりです。

public static void main(String[] args) {

    int number[] = new int[100];

    number[0] = 0;
    number[1] = 1;

    int sum1 = number[0] + number[0];
    int sum2 = sum1 + number[1];
    int sum3 = sum1 + sum2;
    int sum4 = sum2 + sum3;
    int sum5 = sum3 + sum4;
    int sum6 = sum4 + sum5;

    System.out.println(sum1);
    System.out.println(sum2);
    System.out.println(sum3);
    System.out.println(sum4);
    System.out.println(sum5);
    System.out.println(sum6);

}

これを 100 までやっていました。どのように?

4

7 に答える 7

2

ループを使用できます。この例では、数値がすぐに大きくなりすぎるため、BigIntegerを使用しlongます。

BigInteger a = BigInteger.ZERO, b = BigInteger.ONE;
System.out.println(1);
for (int i = 0; i < 100000; i++) {
    BigInteger c = a.add(b);
    System.out.println(c);
    a = b;
    b = c;
}

最後に数秒後に印刷します

420269270299515438 ...多くの、多くの数字が削除されました... 9669707537501

注:前の値をすべて覚える必要はなく、最後の2つだけを覚える必要があります。

于 2013-01-23T16:05:46.670 に答える
0

google search ftw!... 1分もかからなかった

int[] fibonacci = new int[25+1];
fibonacci[1] = 1;
fibonacci[2] = 1;
for ( int i = 3; i < fibonacci.length; i++ )
{
fibonacci[i] = fibonacci[i-2] + fibonacci[i-1];
}
于 2013-01-23T16:00:39.957 に答える
0

これを行う標準的な方法は、再帰によるものです。

次の単純なスニペットを見てください。位置 a でフィボナッチ数を返します。

public static long fib(int a){
      if (a==1||a==2) return 1;
      else return fib(a-1)+fib(a-2);
    }
于 2013-01-23T15:59:40.823 に答える
0

n=11 で印刷番号 < 100

public int getFib(int n){
  if(n==0) return 0;
  else if(n==1) return 1;
 else{
 int temp=getFib(n-1)+getFib(n-2);
 return temp;
 }
}
于 2013-01-23T16:07:02.627 に答える
0

再帰的な方法を使用したくない場合に備えて..
ここに反復があります...

public class Fib2 {

public static int fib(int n, int a, int b)
{
if (n==0)
    {
System.out.print("1x +");
    return a;
    }
else
    {
System.out.print("2x +");
    return fib(n-1,b,a+b);
    }
}
public static void main(String arg[])
{
System.out.println(fib(0,1,1));
}
}   
于 2013-01-23T16:21:18.417 に答える