Код Java показывает неправильное число Фибоначчи в последовательности Фибоначчи

Я пытаюсь создать код Java, который отображает n-е число в последовательности Фибоначчи. Например, если я введу 7, код должен показать число 8, так как 7-е число в последовательности Фибоначчи равно 8.

Но когда я попытался сделать один, он показывает неправильный номер. По какой-то причине, когда я ввожу 7, отображается 13, а когда я ввожу 1, отображается 1, хотя я уже говорил, что первое число в коде — 0.

Scanner input = new Scanner(System.in);
System.out.print(“In: ”);
int n = input.nextInt();

int x = 0;
int y = 1;
int a;

for (int i = 1; i <= n; i++) {
  a = x + y;
  x = y;
  y = a;
}
System.out.print(x + " ");

Я думаю, что код по какой-то причине игнорирует первый 0, который я не понимаю. Я бы хотел помочь, спасибо.

Что произойдет, если вы напечатаете y вместо x?

Ole V.V. 17.12.2022 09:14

Ваша проблема связана с семантикой. Обычная последовательность чисел Фибоначчи (F) равна 0,1,1,2,3,5,8,13... а nth число Фибоначчи равно F(n) = F(n-1)+F(n-2 ) с F(0) = 0 и F(1) = 1. Таким образом, ваша подсказка запрашивает n, и поэтому F (7) действительно = 13. Ваш код дает правильный ответ. Кроме того, «когда я ввожу 1, отображается 0»; это неверно: ваш код выдает 1 при вводе 1. Вот что я получаю, когда ввожу «0», «1», «2», «3» и т. д. `0 1 1 2 3 5», что правильно. Ссылка

468d9539-9881-4abc-af24-86bca6 17.12.2022 10:57
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
2
87
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

вам нужно будет изменить условие for на i <= n-1 и сделать отдельное условие, когда это первый термин. Ряд Фибоначчи 1 1 2 3 5 8 13 но согласно вашему коду он принимает это как 1 2 3 5 8 13

Попробуй это

Scanner input = new Scanner(System.in);
System.out.print("In: ");
int n = input.nextInt();

int x = 0;
int y = 1;
int a;

for (int i = 1; i <= n; i++) {
  a = x + y;
  x = y;
  y = a;
}
System.out.print(x + " ");

Чем это отличается от кода в вопросе? Обратите внимание, что ответы, содержащие только код без пояснений, редко бывают полезными.

Jon Skeet 17.12.2022 09:45

Spandan прав, если вы измените свой код на приведенный ниже, вы получите правильный ответ от 1 и выше...

Примечание:

  1. Теперь цикл повторяется только до тех пор, пока i<n удаляет нежелательный результат.

  2. Однако цикл никогда не даст первое число в последовательности (ноль), поскольку первая итерация не может быть меньше единицы. По этой причине я добавил печать X до того, как цикл запустится в первый раз.

Надеюсь, это поможет :)

import java.util.Scanner;

public class Fibonacci {
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print("Enter the number of terms: ");
    int n = input.nextInt();

    int x = 0;
    int y = 1;
    int a;

    System.out.print("Fibonacci sequence: ");
    System.out.print(x + " ");
     
    for (int i = 1; i < n; i++) {
      a = x + y;
      x = y;
      y = a;
      System.out.print(x + " ");
    }
  }
}

Другие вопросы по теме