From b8f6f9d7f93cc7bdf0ffe8bdb5b0d8e3afd0d507 Mon Sep 17 00:00:00 2001 From: vatsalgosar Date: Thu, 5 Dec 2019 20:54:42 +0530 Subject: [PATCH] BAEL-3519 (#8169) * BAEL-3519 - Fibonacci Series - Recursive method - Iterative method * - Added new method that uses Golden Ratio to calculate the given term of Fibonacci Series * added binet formula implementation of constant time for fibonacci term --- .../fibonacci/FibonacciSeriesUtils.java | 34 +++++++++++++++++++ .../FibonacciSeriesUtilsUnitTest.java | 29 ++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 java-numbers-2/src/main/java/com/baeldung/fibonacci/FibonacciSeriesUtils.java create mode 100644 java-numbers-2/src/test/java/com/baeldung/fibonacci/FibonacciSeriesUtilsUnitTest.java diff --git a/java-numbers-2/src/main/java/com/baeldung/fibonacci/FibonacciSeriesUtils.java b/java-numbers-2/src/main/java/com/baeldung/fibonacci/FibonacciSeriesUtils.java new file mode 100644 index 0000000000..943fcffa56 --- /dev/null +++ b/java-numbers-2/src/main/java/com/baeldung/fibonacci/FibonacciSeriesUtils.java @@ -0,0 +1,34 @@ +package com.baeldung.fibonacci; + +import static java.lang.Math.pow; + +public class FibonacciSeriesUtils { + + public static int nthFibonacciTermRecursiveMethod(int n) { + if (n == 0 || n == 1) { + return n; + } + return nthFibonacciTermRecursiveMethod(n - 1) + nthFibonacciTermRecursiveMethod(n - 2); + } + + public static int nthFibonacciTermIterativeMethod(int n) { + if (n == 0 || n == 1) { + return n; + } + int n0 = 0, n1 = 1; + int tempNthTerm; + for (int i = 2; i <= n; i++) { + tempNthTerm = n0 + n1; + n0 = n1; + n1 = tempNthTerm; + } + return n1; + } + + public static int nthFibonacciTermUsingBinetsFormula(int n) { + final double squareRootOf5 = Math.sqrt(5); + final double phi = (1 + squareRootOf5)/2; + int nthTerm = (int) ((Math.pow(phi, n) - Math.pow(-phi, -n))/squareRootOf5); + return nthTerm; + } +} diff --git a/java-numbers-2/src/test/java/com/baeldung/fibonacci/FibonacciSeriesUtilsUnitTest.java b/java-numbers-2/src/test/java/com/baeldung/fibonacci/FibonacciSeriesUtilsUnitTest.java new file mode 100644 index 0000000000..60f79d0c78 --- /dev/null +++ b/java-numbers-2/src/test/java/com/baeldung/fibonacci/FibonacciSeriesUtilsUnitTest.java @@ -0,0 +1,29 @@ +package com.baeldung.fibonacci; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class FibonacciSeriesUtilsUnitTest { + + @Test + public void givenTermToCalculate_thenReturnThatTermUsingRecursion() { + int term = 10; + int expectedValue = 55; + assertEquals(FibonacciSeriesUtils.nthFibonacciTermRecursiveMethod(term), expectedValue); + } + + @Test + public void givenTermToCalculate_thenReturnThatTermUsingIteration() { + int term = 10; + int expectedValue = 55; + assertEquals(FibonacciSeriesUtils.nthFibonacciTermIterativeMethod(term), expectedValue); + } + + @Test + public void givenTermToCalculate_thenReturnThatTermUsingBinetsFormula() { + int term = 10; + int expectedValue = 55; + assertEquals(FibonacciSeriesUtils.nthFibonacciTermUsingBinetsFormula(term), expectedValue); + } +}