这是我的代码中与解决问题相关的一部分
std::array<T, N>
它是我创建的Fibonacci类的一部分,它有一个构造函数,一个getter和setter方法。
我的目标是在控制台中实现和打印斐波那契数字 例如2,8,3 ......等等。
在main方法中,每当我在对象上应用该方法时,我都会收到一条java.lang.StackOverflowError消息,其中包含进行赋值的行的问题。
我该怎么办?
答案 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();
}