Числа Фибоначчи в Java — последовательность через цикл и рекурсию

Последовательность Фибоначчи начинается с двух чисел — 0 и 1, а каждое следующее число равно сумме двух предыдущих: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 и так далее.

Пример 1: вывод последовательности Фибоначчи с помощью цикла for

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

class Main {
  public static void main(String[] args) {

    int n = 10, firstTerm = 0, secondTerm = 1;
    System.out.println("Fibonacci Series till " + n + " terms:");

    for (int i = 1; i <= n; ++i) {
      System.out.print(firstTerm + ", ");

      // compute the next term
      int nextTerm = firstTerm + secondTerm;
      firstTerm = secondTerm;
      secondTerm = nextTerm;
    }
  }
}

Вывод:

Fibonacci Series till 10 terms:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34,

В программе firstTerm и secondTerm инициализируются значениями 0 и 1 (первые два числа Фибоначчи).

Внутри цикла for происходит следующее:

  • печатается firstTerm (очередное число последовательности);

  • вычисляется nextTerm как сумма firstTerm и secondTerm;

  • значения сдвигаются: в firstTerm записывается secondTerm, а в secondTermnextTerm.

Пример 2: вывод последовательности Фибоначчи с помощью цикла while

Тот же результат можно получить через while, явно увеличивая переменную i.

class Main {
  public static void main(String[] args) {

    int i = 1, n = 10, firstTerm = 0, secondTerm = 1;
    System.out.println("Fibonacci Series till " + n + " terms:");

    while (i <= n) {
      System.out.print(firstTerm + ", ");

      int nextTerm = firstTerm + secondTerm;
      firstTerm = secondTerm;
      secondTerm = nextTerm;

      i++;
    }
  }
}

Вывод:

Fibonacci Series till 10 terms:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34,

Работа программы аналогична предыдущей.

Совет

Обе версии корректны, но когда заранее известно количество итераций (от 1 до n), удобнее использовать цикл for.

Пример 3: вывод чисел Фибоначчи до заданного значения

В этом варианте мы печатаем все числа Фибоначчи, не превышающие заданного предела n.

class Fibonacci {
  public static void main(String[] args) {

    int n = 100, firstTerm = 0, secondTerm = 1;

    System.out.println("Fibonacci Series Upto " + n + ": ");

    while (firstTerm <= n) {
      System.out.print(firstTerm + ", ");

      int nextTerm = firstTerm + secondTerm;
      firstTerm = secondTerm;
      secondTerm = nextTerm;

    }
  }
}

Вывод:

Fibonacci Series Upto 100:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,

Здесь вместо вывода заданного количества чисел мы печатаем последовательность до тех пор, пока firstTerm не превысит 100.