所以我要做的是向用户询问一个数字,并找出它的fibonacci术语是什么。到目前为止,如果输入整数0 <=,则返回正确的fibonacci项。但是当我尝试使用负数时,我会得到一个错误。
代码:
public int fib(int n) {
if (n == 0 || n == 1 || n == -1) {
// if n is 1, 0 or -1
return Math.abs(n);
} else if (n < 0) {
// if n is negative
return (-1)^(n + 1) * fib(n);
} else {
// if n is positive
return fib(n - 1) + fib(n - 2);
}
}
错误:
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at Fibonacci.fib(Fibonacci.java:133)
at Fibonacci.fib(Fibonacci.java:133)
at Fibonacci.fib(Fibonacci.java:133)
at Fibonacci.fib(Fibonacci.java:133)
at Fibonacci.fib(Fibonacci.java:133)
at Fibonacci.fib(Fibonacci.java:133)
at Fibonacci.fib(Fibonacci.java:133)
at Fibonacci.fib(Fibonacci.java:133)
at Fibonacci.fib(Fibonacci.java:133)
发布于 2020-10-28 00:55:34
你的代码有几处不对劲。首先,^
不是指数,而是逐位的xor。相反,您必须使用Math.pow
。另外,当您应该调用fib(n)
时,您可以调用fib(-n)
(这样就可以得到正指数的fibonacci数):
return ((int) Math.pow(-1, n + 1)) * fib(-n);
发布于 2020-10-28 01:06:16
看看这个,找到一个关于实现Fibonacci序列的负面部分的答案(它在c++中,但它有帮助):
https://stackoverflow.com/questions/64564965
复制相似问题