使用Java中的递归方法实现类Fibonacci

时间:2015-12-07 19:13:12

标签: java recursion fibonacci

这是我的代码中与解决问题相关的一部分

std::array<T, N>

它是我创建的Fibonacci类的一部分,它有一个构造函数,一个getter和setter方法。

我的目标是在控制台中实现和打印斐波那契数字 例如2,8,3 ......等等。

在main方法中,每当我在对象上应用该方法时,我都会收到一条java.lang.StackOverflowError消息,其中包含进行赋值的行的问题。

我该怎么办?

2 个答案:

答案 0 :(得分:2)

你需要一个计算 nth 斐波纳契数的方法并返回结果 - 所以你必须告诉它在你想要的斐波纳契数列中的哪个数字。
这需要一个参数。

public long fib(int n) {
    ...
}

现在斐波那契数是前两个斐波纳契数的总和;

fib(6) = fib(5) + fib(4)
// or more generally
fib(n) = fib(n-1) + fib(n-2)

所以(没有为你编写全部内容)你的方法需要接受传递必要的参数:

public long fib(int n) {
    if (n == 0) return 0;
    //  etc. -- handle the defined/degenerate cases
    return fib(n-1) + fib(n-2)
}

答案 1 :(得分:2)

Fibonacci序列的计算可以通过实施如下方法来完成。

public long Recursiv(int n)
{
    if (0 == n)
        return 0;
    else if (1 == n)
        return 1;
    else
        return this.Recursiv(n - 1) + this.Recursiv(n - 2)
}

但是这需要更改方法的签名。

编辑:

显然我有点误解了这个问题;在构造函数中给出了所需的参数,该方法应该使用具有较小参数的实例进行评估。该方法也可以如下实现。

public long Recursiv()
{
    if(this.getNumar() == 0)
        return 0;
    if(this.getNumar() <= 2)
        return 1;
    else
        return new Fibonacci(this.getNumar() - 2).Recursiv()
             + new Fibonacci(this.getNumar() - 1).Recursiv();
}