# Fibonacci series in Java using recursion

In this blog, we will understand how to create a Fibonacci series in Java using recursion. In Java, creating a Fibonacci series using recursion means writing a method that keeps calling itself to calculate each number in the series. Imagine you have a line of numbers where each one is the sum of the two before it. For example, 0, 1, 1, 2, 3, 5, 8, and so on.

## Fibonacci series in Java using recursion- Code

//importing necessary packages
import java.util.Scanner;

//defining class
public class Main {
//defining recursive function to calculate Fibonacci series
public static int fibonacci(int n) {
//base case
if (n == 0 || n == 1) {
return n;
}
//recursive call to calculate previous two numbers in the series
return fibonacci(n-1) + fibonacci(n-2);
}

//main method
public static void main(String[] args) {
//creating scanner object to take user input
Scanner input = new Scanner(System.in);
//prompting user to enter the number of terms in the series
System.out.print("Enter the number of terms in the Fibonacci series: ");
//storing user input in a variable
int n = input.nextInt();
//printing the Fibonacci series using recursion
System.out.print("Fibonacci series of " + n + " terms: ");
for (int i = 0; i < n; i++) {
System.out.print(fibonacci(i) + " ");
}
}
}

Explanation of the code-

The provided Java code calculates the Fibonacci series using recursion. Here’s a breakdown of the code:

1. The `Scanner` class is imported from the `java.util` package to facilitate user input.

2. The `Main` class is defined to encapsulate the program logic.

3. The `fibonacci` method calculates the `n`-th Fibonacci number recursively. If `n` is 0 or 1, it returns `n`. Otherwise, it computes the sum of `fibonacci(n-1)` and `fibonacci(n-2)` to generate the next Fibonacci number.

4. The `main` method is where the program starts. It takes user input to determine the number of terms in the Fibonacci series. Then, it prints the Fibonacci series using a `for` loop, calling the `fibonacci` method for each term and printing the result.
Output:

Enter the number of terms in the Fibonacci series: 7
Fibonacci series of 7 terms: 0 1 1 2 3 5 8

## Understanding Time Complexity

– Explanation of the time complexity of the recursive Fibonacci algorithm.

Understanding the time complexity of the recursive Fibonacci algorithm is crucial for evaluating its efficiency. The recursive approach has an exponential time complexity of O(2^n) due to redundant computations.

– Comparison with other methods for generating the Fibonacci series.

In contrast, iterative methods like using a loop have a linear time complexity of O(n), making them more efficient for larger inputs. While recursion offers a concise implementation, it suffers from significant performance drawbacks compared to iterative methods. Therefore, choosing the appropriate method based on the size of the problem is essential for optimizing the generation of the Fibonacci series in terms of time complexity.

### Memoization Technique

Memoization is an optimization technique that involves storing the results of expensive function calls and returning the cached result when the same inputs occur again. To implement memoization for the recursive Fibonacci function:

1. Create a cache data structure (e.g., an array or HashMap) to store previously computed Fibonacci numbers.

2. Before computing a Fibonacci number, check if it exists in the cache.

3. If the number is found in the cache, return its value.

4. If not, compute the Fibonacci number recursively and store it in the cache.

5. Return the computed Fibonacci number.

## Advanced Applications of Fibonacci Series and Recursion

The Fibonacci series, when combined with recursion, finds applications beyond traditional programming scenarios, particularly in advanced applications and specialized domains:

1. Algorithmic Trading: Fibonacci retracement levels are utilized in technical analysis to predict financial market price movements, utilizing recursion to analyze historical data and identify potential price reversals.

2. Bioinformatics: Recursive algorithms aid in analyzing genetic sequences, identifying patterns, and predicting gene mutations or protein folding in bioinformatics.

3. Artificial Intelligence: The Fibonacci series is a benchmark used in AI algorithms like tree traversal and pathfinding to evaluate the efficiency and scalability of recursive methods.

4. Digital Image Processing: Recursive algorithms are used in image compression and edge detection techniques, while Fibonacci-based algorithms optimize tasks, improve image quality, and reduce computational overhead.

5. Optimization Problems: Fibonacci-based recursion is utilized in optimization problems like job scheduling and resource allocation, utilizing recursive algorithms to efficiently explore all possible combinations.

6. Cryptanalysis: Fibonacci-based sequences for encryption and decryption processes, while recursive algorithms generate test cases to analyze encryption algorithms’ security and identify vulnerabilities.

7. Robotics: Fibonacci-inspired algorithms are utilized in robotic motion planning and path optimization, enhancing efficiency and preventing collisions through complex pathfinding through recursion.

8. Natural Language Processing: Recursive algorithms are utilized in natural language processing (NLP) for parsing and syntax analysis, while Fibonacci-based techniques enhance grammar analysis and sentence structure identification.

Advanced applications showcase the Fibonacci series and recursion’s utility in specialized domains, contributing to technology, science, and research advancements, and enabling developers to tackle complex challenges.

In this blog, we have explored the Fibonacci Series in Java using recursion in-depth, covering topics such as time complexity, the memoization technique, comparison with other methods, and its advanced applications. Similarly, we have explained many coding concepts in detail. You can access coding-related information through blogs and courses on Newtum.