如何使用递归在Java中制作负Fibonacci序列?

时间:2018-11-06 09:02:46

标签: java recursion fibonacci negative-number

我必须编写一个返回斐波那契数的程序,但不仅返回正数。我不知道我编写它的方式有什么不对,但是我的代码只能使用正数而不是负数。

public static int negFib(int n) {
    if(n==0 || n==1) {
        return n;
    }
    if(n==-1) {
        return 1;
    }
    if(n<0 && n%2==0) {
        //return negFib(n+2) - negFib(n+1);
        return (-1<<(n+1))*(negFib(n-1) + negFib(n-2); // Fibonacci negative
        //F(n)=F(n+2)−F(n+1)
        //F(−1)=F(1)−F(0)=1−0=1 , F(−2)=F(0)−F(1)=0−1=−1
    } 
    return negFib(n-1) + negFib(n-2); //Fibonacci positive      
}

1 个答案:

答案 0 :(得分:2)

好吧,如果要使用F -n =(-1) n + 1 F n 公式:

public static int negFib(int n) {
    if(n==0 || n==1) {
        return n;
    }
    if(n==-1) {
        return 1;
    }
    if(n<0) {
        int sign = n % 2 == 0 ? -1 : 1;
        return sign * negFib(-n);
    } else {
        return negFib(n-1) + negFib(n-2);
    }     
}

您的尝试遇到了几个问题:

  • 对于否定的n(奇数或偶数),您应递归调用-n-1-n-2
  • 您对符号(-1<<(n+1))的计算是错误的。