如何使用try / catch逻辑在java中实现fibonacci序列?

时间:2010-05-07 18:11:29

标签: exception exception-handling stack try-catch

我知道如何使用简单的递归来完成它,但是为了完成这个特定的赋值,我需要能够在堆栈上累积并抛出一个包含答案的异常。

到目前为止,我有:

public static int fibo(int index) {
    int sum = 0;
    try {
        fibo_aux(index, 1, 1);
    }
        catch (IntegerException me) {
    sum = me.getIntValue();
    }
    return sum;
}

fibo_aux应该抛出一个IntegerException(它保存通过getIntValue退出的答案的值)并在堆栈上累积答案,但到目前为止我无法弄明白。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

我不知道您对fibo_auxIntegerException的实现是什么样的,但以下两个实现适用于您现有的代码(我认为您发布的代码没有任何问题,所以我认为fibo_auxIntegerException中的某些内容是错误的。也许你会觉得这很有帮助。

public static void fibo_aux(int index, int a, int b) throws IntegerException
{
    if (--index > 0)
        fibo_aux(index, b, a + b);
    else
        throw new IntegerException(a + b);
}

IntegerException的实现:

public class IntegerException extends Exception
{

    private static final long serialVersionUID = -6795044518321782305L;

    private Integer intValue;

    public IntegerException(int i)
    {
        this.intValue = i;
    }

    public Integer getIntValue()
    {
        return intValue;
    }
}

答案 1 :(得分:0)

你走了:

public class ExcFib {

/**
 * @param args
 */
public static void main(String[] args) {

    new ExcFib().fibo ( 10 );

}

class FiboException extends Throwable
{
    public int n;
    public FiboException(int n)
    {
        this.n = n;
    }       
    private static final long serialVersionUID = 1L;        
}

public void fibo(int idx) {
    try {
        fibo_aux(idx-1,1,1);
    } catch (FiboException e) {
        System.out.println ( "F(" + idx + ") = " + e.n   );
    }                               
}

private  void fibo_aux(int i, int j, int k) throws FiboException {
    if ( i < 1 ) 
    {
        throw new FiboException(k);         
    }
    fibo_aux(i - 1, k, j + k );
}

}