2

Java 堆栈究竟是如何设置的?

对于大学,我将确定通过递归方法计算并可以由堆栈处理的最大可能的斐波那契数。

有趣的是:测试表明-XmxJVM拥有多少并不重要。我能够跑到 Fib(4438)。但结果并不一致。有时它会下降到 4436。-Xms

堆栈有公式吗?

堆栈通过的任何增加-Xss 4096m都不会产生影响。

4

3 回答 3

3

-Xmx 和 -Xms 设置 JVM heap可访问的内存,您需要增加堆栈大小,您可以在 -Xss 选项的帮助下执行此操作。

于 2012-04-25T18:00:06.440 回答
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 回答
-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 回答