2

Javaスタックはどのように設定されていますか?

大学では、再帰的な方法で計算され、スタックで処理できる最大のフィボナッチ数を決定します。

興味深いのは、-XmxJVMどれだけ持っているかは問題ではないことがテストで示されたということです。Fib(4438) まで実行できます。しかし、結果は一貫していません。4436 まで下がることもあります。-Xms

スタックの公式はありますか?

スタック ビアを増やして-Xss 4096mも違いはありません。

4

3 に答える 3

3

あなたは割り当てを誤解しました。スタックサイズはほとんど問題になりません。問題は指数関数的です。また、単純な再帰プログラムで Fib(4438) に到達することはできません。次のコードを使用すると、Fib(50) に到達できれば幸運です。

public static BigInteger f(int n) {
    if (n == 0) 
        return BigInteger.ZERO; 
    if (n == 1) 
        return BigInteger.ONE; 
    return f(n-1).add(f(n-2));
}
于 2012-04-26T06:47:33.777 に答える
3

-Xmx および -Xms は、JVMヒープにアクセス可能なメモリを設定します。スタックサイズを増やす必要があります。これは、-Xss オプションを使用して行います。

于 2012-04-25T18:00:06.440 に答える
-2

ジャバ。プログラミング方法、第 9 版、Deitel および Deitel、771 ページ:

 // Fig. 18.5: FibonacciCalculator.java
 // Recursive Fibonacci method.
 import java.math.BigInteger;
 public class FibonacciCalculator
 {
     private static BigInteger TWO = BigInteger.valueOf( 2 );


     // Recursive declaration of method fibonacci
     public static BigInteger fibonacci( BigInteger number )
     {
         if ( number.equals( BigInteger.ZERO ) ||
              number.equals( BigInteger.ONE ) ) // Base cases
             return number;
         else // Recursion step
             return fibonacci( number.subtract( BigInteger.ONE ) ).add(
         fibonacci( number.subtract( TWO ) ) );
     } // end method fibonacci


     // Displays the Fibonacci values from 0-40
     public static void main( String[] args )
     {
         for ( int counter = 0; counter <= 40; counter++ )
             System.out.printf( "Fibonacci of %d is: %d\n", counter,
         fibonacci( BigInteger.valueOf(counter)));
     } // End main()

 } // end class FibonacciCalculator

これが役立つことを願っています。

于 2012-04-25T18:09:05.960 に答える