我知道如何使用简单的递归来完成它,但是为了完成这个特定的赋值,我需要能够在堆栈上累积并抛出一个包含答案的异常。
到目前为止,我有:
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退出的答案的值)并在堆栈上累积答案,但到目前为止我无法弄明白。有人可以帮忙吗?
答案 0 :(得分:1)
我不知道您对fibo_aux
和IntegerException
的实现是什么样的,但以下两个实现适用于您现有的代码(我认为您发布的代码没有任何问题,所以我认为fibo_aux
或IntegerException
中的某些内容是错误的。也许你会觉得这很有帮助。
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 );
}
}