在 Java 中使用递归方法实现 class 斐波那契数列

Implementing class Fibonacci with a recursive method in Java

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

public long Recursiv(){
    Fibonacci fibo = new Fibonacci(this.getNumar());
    long fibnum;

    if(this.getNumar() == 0) return 0;
    if(this.getNumar() <= 2) return 1;
    else
        fibnum = (fibo.Recursiv()-1) + (fibo.Recursiv()-2);
        return fibnum;

}

它是我创建的斐波那契 class 的一部分,它有一个构造函数、一个 getter 和 setter 方法。

我的目标是在控制台中实现并打印偶数斐波那契数 例如2、8、34...等等

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

我该怎么办?

您需要一种方法来计算 nth 斐波那契数和 returns 结果 — 所以您必须 告诉 它你想要斐波那契数列中的哪个数字。
那需要一个参数。

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

斐波那契数列的计算可以通过执行下面的方法来完成。

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