JAVA在发生堆栈溢出之前确定限制,fibonacci序列

时间:2014-10-03 19:49:09

标签: java loops recursion fibonacci

我正在尝试使用2种不同的方法计算Fibonacci序列,一种递归,另一种使用循环。如果要求用户输入数字,我很难确定如何确定每种方法的限制。这是我的代码:

import java.util.Scanner;
public class Recursion {

public static void main(String[] args) 
{
    Scanner kb = new Scanner(System.in);
    long n, result1, result2, startTime1, stopTime1, startTime2, stopTime2;

    System.out.println("Please Enter A Number in between 0 and maxValue, will be calcualtred using 2 methods....");
    n = kb.nextLong();

    startTime1 = System.nanoTime();
    result1 = fibRecursive(n);
    stopTime1 = System.nanoTime();

    startTime2 = System.nanoTime();
    result2 = fibLoop(n);
    stopTime2 = System.nanoTime();

    System.out.println("\nDisplaying solution for recursive method: "+ result1 + " Time Taken (in nanoseconds): " + (stopTime1 - startTime1));
    System.out.println("\nDisplaying solution for loop method: "+ result2 + " Time Taken (in nanoseconds): " + (stopTime2 - startTime2));
    System.out.println("\nThanks for using our fibnoacci calculator. ");
}

public static long fibRecursive(long i)  
{
    if(i == 0)
        return 0;
    else if(i == 1)
        return 1;
    else
        return fibRecursive(i - 1) + fibRecursive(i - 2);
}
public static long fibLoop(long k)  
{
    long a = 0, b = 1, ans = 0;
    if(k == 0)
        return 0;
    else if(k == 1)
        return 1;
    else
    for(int i = 1; i < k; i++)
    {
        ans = a + b;
        a = b;
        b = ans;    
    }
    return ans;
}

1 个答案:

答案 0 :(得分:0)

另一种方法可能是尝试捕捉错误。

try {

} catch(StackOverflowError e){
        System.err.println("ouch!");
}