Фибоначчи Рекурсивный возвращает бесконечное число - PullRequest
1 голос
/ 28 мая 2019

Мой код показывает бесконечное число "2", я не понимаю, почему.

Также мой преподаватель сказал мне добавить проверку для отрицательных значений - я не знаю, как это сделать.

    public class FibonacciRecursive {

   public static void main(String[] args) {
        int fibonacciNumberOrder = 10;
        do {
            System.out.print(fibonacci(fibonacciNumberOrder) + " ");

        } while (true);
    }

    public static long fibonacci(int fibonacciNumberInOrder) {
        if (fibonacciNumberInOrder == 0) {
            return 0;
        }
        if (fibonacciNumberInOrder <= 2) {
            return 1;
        }
        long fibonacci = fibonacci(-1) + fibonacci(-2);
        return fibonacci;
    }
}

редактировать: Когда я изменил эту строку

long fibonacci = fibonacci(-1) + fibonacci(-2);

до:

long fibonacci = fibonacci(fibonacciNumberInOrder-1) + fibonacci(fibonacciNumberInOrder-2);

Он печатает бесконечные "55"

Как мне изменить свой код, чтобы он работал?

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Это происходит потому, что вы вычисляете число Фибоначчи с помощью констант, а не относительных чисел к прошедшим, что является точкой рекурсии.

public static long fibonacci(int fibonacciNumberInOrder) {
    if (fibonacciNumberInOrder == 0) {
        return 0;
    }
    if (fibonacciNumberInOrder <= 2) {
        return 1;
    }
    long fibonacci = fibonacci(fibonacciNumberInOrder - 1) + fibonacci(fibonacciNumberInOrder - 2);
    return fibonacci;
}

Строка изменения ключа:

long fibonacci = fibonacci(fibonacciNumberInOrder-1) + fibonacci(fibonacciNumberInOrder-2);
0 голосов
/ 28 мая 2019

Вы рекурсивны с константами! Изменить это

long fibonacci = fibonacci(-1) + fibonacci(-2);

до

long fibonacci = fibonacci(fibonacciNumberInOrder-1) + fibonacci(fibonacciNumberInOrder-2);

И, в вашем while цикле в main - вам нужно изменить fibonacciNumberInOrder

int fibonacciNumberOrder = 1;
do {
    System.out.print(fibonacci(fibonacciNumberOrder) + " ");
    fibonacciNumberOrder++;
} while (true);
...