How exactly is the Java stack set up?
For university, I shall determine what the biggest possible Fibonacci number that is calculated by a recursive method and can be handled by the stack.
The interesting thing is: Tests showed that it doesn't matter how much -Xmx
and -Xms
the JVM has. I am able to run up to Fib(4438). But the results aren't consistent. Somtimes it goes down to 4436.
Is there formular for the stack?
Any increase of the stack via -Xss 4096m
doesn't make a difference.
-Xmx和-Xms设置JVM 堆可访问的内存,您需要增加堆栈大小,可借助-Xss选项来实现。
You've misinterpreted the assignment. Stack size matters very little. The problem is exponential. And you cannot possibly have gotten to Fib(4438) with the naive recursive program. Using the following code, you'll be lucky if you make it to 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));
}
Java. How to program , 9th edition, Deitel and Deitel , page 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
I hope this helps.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.