Создание рекурсивного метода с тройным Фибоначчи в Java

#java #fibonacci

#java #фибоначчи

Вопрос:

Здесь у меня есть свой код, который является вариацией рекурсивного метода Фибоначчи. Я пытаюсь получить правильное значение n для отображения, но оно просто не работает… Я всегда отклоняюсь на одно место в тройном Фибоначчи (что означает, что тройные числа Фибоначчи основаны на числах Фибоначчи, но начинаются с трех предопределенных значений, каждое значение впоследствии является суммой предыдущих трех значений вместо 2 в Фибоначчи)

 public long BinaryOddonacci(int n){
    if (n<=2){ // If the n is 0,1 or 2 the answer is 1
        return 1;
    }
    else {return BinaryOddonacci(n-1)   BinaryOddonacci(n-2)   BinaryOddonacci(n-3);} // recursive call
}
  

Результат, который я должен получить для BinaryOddonacci (10), равен 105, но я продолжаю получать 193, что и должно быть получено для BinaryOddonacci (11)…

Комментарии:

1. «это просто не работает… Я всегда ошибаюсь на одно место в тройном Фибоначчи » Пожалуйста, приведите конкретный пример. Каков фактический результат и чем он отличается от того, что вы ожидаете?

2. Добавлен @Code-Apprentice!

3. Давайте вернемся к чему-то немного более простому. Что должно BinaryOddonacci(3) быть? Что вы на самом деле получаете?

4. Почему результат равен 1 для ввода 0? Для обычного Фибоначчи этот результат равен 0 для ввода 0.

Ответ №1:

По определению, вы устанавливаете 0-е, 1-е и 2-е значения равными 1 (согласно этому комментарию // If the n is 0,1 or 2 the answer is 1 ). Итак, последовательность выглядит следующим образом:

 0 :  1
1 :  1
2 :  1
3 :  3
4 :  5
5 :  9
6 :  17
7 :  31
8 :  57
9 :  105
10 :  193
  

Другими словами, BinaryOddonacci(10) должен возвращать 193, что и возвращает. Здесь нет ошибки.