Как сделать отрицательную последовательность Фибоначчи в Java с помощью рекурсии? - PullRequest
0 голосов
/ 06 ноября 2018

Мне нужно написать программу, которая возвращает число Фибоначчи, но не только положительное. Я не знаю, что не так, как я написал, но мой код работает с положительными числами, а не с отрицательными.

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 голосов
/ 06 ноября 2018

Хорошо, если вы хотите использовать 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)) - неверен.
...