首页 > 解决方案 > 当我输入负数时,斐波那契数列“nth term finder”似乎不起作用

问题描述

所以我想做的是向用户询问一个数字并找出它的斐波那契术语是什么。到目前为止,如果输入了一个整数 0 <=,那么它会返回正确的斐波那契项。但是当我尝试使用负数时,我得到了一个错误。

代码:

 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)

标签: java

解决方案


您的代码有几处有问题。首先,^不是求幂,而是按位异或。相反,您必须使用Math.pow. 此外,fib(n)当您应该调用时,您调用fib(-n)(以便获得正指数的斐波那契数):

return ((int) Math.pow(-1, n + 1)) * fib(-n);

推荐阅读