如何设置Java堆栈?
对于大学,我将确定通过递归方法计算的最大可能Fibonacci number是什么,并且可以由堆栈处理。
有趣的是:测试表明,JVM有多少-Xmx
和-Xms
并不重要。我能够跑到Fib(4438)。但结果并不一致。有时它会下降到4436。
堆栈是否有公式?
通过-Xss 4096m
增加堆栈并没有什么不同。
答案 0 :(得分:3)
-Xmx和-Xms设置JVM 堆可访问的内存,需要增加堆栈大小,在-Xss选项的帮助下执行此操作。
答案 1 :(得分: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));
}
答案 2 :(得分:-2)
Java. How to program, 9th edition, Deitel and 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
我希望这会有所帮助。