如何在Java中使用递归生成负斐波那契序列?

如何在Java中使用递归生成负斐波那契序列?,java,recursion,fibonacci,negative-number,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

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

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      
}
public static int negFib(int n){
如果(n==0 | | n==1){
返回n;
}
如果(n==-1){
返回1;
}

如果(n好,如果你想用F−n=(−1) n+1Fn公式:

public static int negFib(int n){
如果(n==0 | | n==1){
返回n;
}
如果(n==-1){
返回1;
}

如果(您没有使用
a
。您将其创建为
abs(n)
,然后不对其执行任何操作。使用负
n
计算
negFib(n-1)
negFib(n-2)
,两者都离基本情况更远,因此您的递归将太大而无法计算。为什么不使用
if(n<0)返回negFib(n+2)-negFib(n+1)
-与给定的公式完全相同…在这种情况下,无需检查
-1
,也无需检查
n%2==0
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);
    }     
}