0

私は Project Euler #25 に取り組んでいます。すべてのフィボナッチ数を BigInteger 配列に保存するつもりです。ただし、NullPointerException がスローされます。理由と回避方法がわかりません。この問題を解決するためのもっと単純なアルゴリズムがあることを私は知っています。しかし、どこが間違っているのか知りたいだけです。どうもありがとうございました!質問の状態は次のとおりです。フィボナッチ数列は、再帰関係によって定義されます。

Fn = Fn−1 + Fn−2、ここで F1 = 1 および F2 = 1. したがって、最初の 12 項は次のようになります。

F1 = 1 F2 = 1 F3 = 2 F4 = 3 F5 = 5 F6 = 8 F7 = 13 F8 = 21 F9 = 34 F10 = 55 F11 = 89 F12 = 144 第 12 項 F12 は、3 桁を含む最初の項です。 .

フィボナッチ数列で最初に 1000 桁になる項は?

私のコードは以下の通りです:

  private static BigInteger[] fibonacci;
    public static void main(String[] args) {
        for(int i = 0; fibonacci[fibonacci.length-1].toString().length() < 1000; i++){
            if(i == 0)
                fibonacci[i] = BigInteger.ZERO;
            if(i < 3)
                fibonacci[i] = BigInteger.valueOf(1);
            else
                fibonacci[i] = fibonacci[i - 1].add(fibonacci[i - 2]);
        }
        System.out.println(fibonacci.length);
    }
4

2 に答える 2

3

配列を初期化していませんfibonacci。配列を使用する前にメモリを割り当てる必要があります。

private static BigInteger[] fibonacci = new BigInteger[1000]; // Some number x

List配列のサイズがわからない場合は、配列の代わりにa を使用することをお勧めします。

private static List<BigInteger> fibonacci = new ArrayList<BigInteger>();

また、配列を使用している場合は、fibonacci[fibonacci.length - 1]配列サイズを 1000 に初期化している場合は常に位置 999 をチェックしているため、機能しません。これを機能させるには、を使用する必要がArrayListあり、次に使用できます

fibonacci[fibonacci.size() - 1]
于 2013-05-04T10:22:22.617 に答える