Я пытаюсь создать код 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, который я не понимаю. Я бы хотел помочь, спасибо.
Ваша проблема связана с семантикой. Обычная последовательность чисел Фибоначчи (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», что правильно. Ссылка




вам нужно будет изменить условие 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 + " ");
Чем это отличается от кода в вопросе? Обратите внимание, что ответы, содержащие только код без пояснений, редко бывают полезными.
Spandan прав, если вы измените свой код на приведенный ниже, вы получите правильный ответ от 1 и выше...
Примечание:
Теперь цикл повторяется только до тех пор, пока i<n удаляет нежелательный результат.
Однако цикл никогда не даст первое число в последовательности (ноль), поскольку первая итерация не может быть меньше единицы. По этой причине я добавил печать 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 + " ");
}
}
}
Что произойдет, если вы напечатаете
yвместоx?