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); + } +}