Как реализовать последовательность Фибоначчи в Java с использованием логики try / catch - PullRequest
1 голос
/ 07 мая 2010

Я знаю, как сделать это с помощью простой рекурсии, но для выполнения этого конкретного задания мне нужно иметь возможность накапливаться в стеке и выдавать исключение, содержащее ответ в нем.

Пока чтоУ меня есть:

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 ]

1 голос
/ 07 мая 2010

Я не знаю, как выглядят ваши реализации для 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;
    }
}
0 голосов
/ 07 мая 2010

Вот, пожалуйста:

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 );
}

}

...