Учебники

55) Серия Фибоначчи

Что такое серия Фибоначчи?

В ряду Фибоначчи следующее число является суммой двух предыдущих чисел. Первые два числа ряда Фибоначчи — 0 и 1.

Числа Фибоначчи в значительной степени используются в вычислительном исследовании времени выполнения алгоритма для определения наибольшего общего делителя двух целых чисел. В арифметике массив Wythoff представляет собой бесконечную матрицу чисел, являющуюся результатом последовательности Фибоначчи.

The Fibonacci sequence: 0, 1, 1, 2, 3, 5, 8, 13, 21, ...

Java-код с использованием For Loop

  1. //Using For Loop
  2. public class FibonacciExample {
  3. public static void main(String[] args)
  4. {
  5. // Set it to the number of elements you want in the Fibonacci Series
  6. int maxNumber = 10;
  7. int previousNumber = 0;
  8. int nextNumber = 1;
  9. System.out.print("Fibonacci Series of "+maxNumber+" numbers:");
  10. for (int i = 1; i <= maxNumber; ++i)
  11. {
  12. System.out.print(previousNumber+" ");
  13. /* On each iteration, we are assigning second number
  14. * to the first number and assigning the sum of last two
  15. * numbers to the second number
  16. */
  17. int sum = previousNumber + nextNumber;
  18. previousNumber = nextNumber;
  19. nextNumber = sum;
  20. }
  21. }
  22. }

Вывод:

Fibonacci Series of 10 numbers:0 1 1 2 3 5 8 13 21 34

Логика программы:

  • previousNumber инициализируется до 0, а nextNumber инициализируется до 1
  • Ибо Loop перебирает maxNumber
    • Показать предыдущий номер
    • Вычисляет сумму предыдущего и следующего номеров
    • Обновляет новые значения previousNumber и nextNumber

Java-код с использованием while Loop

Вы также можете генерировать серии Фибоначчи, используя Whileцикл в Java.

  1. //Using While Loop
  2. public class FibonacciWhileExample {
  3. public static void main(String[] args)
  4. {
  5. int maxNumber = 10, previousNumber = 0, nextNumber = 1;
  6. System.out.print("Fibonacci Series of "+maxNumber+" numbers:");
  7. int i=1;
  8. while(i <= maxNumber)
  9. {
  10. System.out.print(previousNumber+" ");
  11. int sum = previousNumber + nextNumber;
  12. previousNumber = nextNumber;
  13. nextNumber = sum;
  14. i++;
  15. }
  16. }
  17. }

Вывод:

Fibonacci Series of 10 numbers:0 1 1 2 3 5 8 13 21 34

Единственное отличие в логике программы — использование цикла WHILE для вывода чисел Фибоначчи.

Ряд Фибоначчи, основанный на пользовательском вводе

  1. //fibonacci series based on the user input
  2. import java.util.Scanner;
  3. public class FibonacciExample {
  4. public static void main(String[] args)
  5. {
  6. int maxNumber = 0;
  7. int previousNumber = 0;
  8. int nextNumber = 1;
  9. System.out.println("How many numbers you want in Fibonacci:");
  10. Scanner scanner = new Scanner(System.in);
  11. maxNumber = scanner.nextInt();
  12. System.out.print("Fibonacci Series of "+maxNumber+" numbers:");
  13. for (int i = 1; i <= maxNumber; ++i)
  14. {
  15. System.out.print(previousNumber+" ");
  16. /* On each iteration, we are assigning second number
  17. * to the first number and assigning the sum of last two
  18. * numbers to the second number
  19. */
  20. int sum = previousNumber + nextNumber;
  21. previousNumber = nextNumber;
  22. nextNumber = sum;
  23. }
  24. }
  25. }

Логика программы:

Логика та же, что и раньше. Вместо того, чтобы жестко задавать количество элементов, отображаемых в серии Фибоначчи, пользователю предлагается написать число.

Java-код с использованием рекурсии

  1. //Using Recursion
  2. public class FibonacciCalc{
  3. public static int fibonacciRecursion(int n){
  4. if(n == 0){
  5. return 0;
  6. }
  7. if(n == 1 || n == 2){
  8. return 1;
  9. }
  10. return fibonacciRecursion(n-2) + fibonacciRecursion(n-1);
  11. }
  12. public static void main(String args[]) {
  13. int maxNumber = 10;
  14. System.out.print("Fibonacci Series of "+maxNumber+" numbers: ");
  15. for(int i = 0; i < maxNumber; i++){
  16. System.out.print(fibonacciRecursion(i) +" ");
  17. }
  18. }
  19. }

Вывод:

Fibonacci Series of 10 numbers: 0 1 1 2 3 5 8 13 21 34

Логика программы:

Рекурсивная функция — это функция, которая может вызывать себя сама.

fibonacciRecursion ():

  1. Принимает входной номер. Проверяет 0, 1, 2 и возвращает 0, 1, 1 соответственно, потому что последовательность Фибоначчи начинается с 0, 1, 1.
  2. Когда вход n равен> = 3, функция будет вызывать себя рекурсивно. Звонок делается два раза. Давайте посмотрим пример для ввода 4.
	fibonacciRecursion (4)  
	It will recursively call fibonacciRecursion function for values 2 and 3
		fibonacciRecursion (2) \\ call for value 0 and 1
			fibonacciRecursion (0) = 0
			fibonacciRecursion (1) = 1
		fibonacciRecursion (3) \\ It will call for 1 and 2
			fibonacciRecursion (1) = 1
			fibonacciRecursion (2) \\ It will call for 0 and 1
				fibonacciRecursion (0) = 0
				fibonacciRecursion (1) = 1

Теперь результат добавлен 0 + 1 + 1 + 0 + 1 = 3