Recursion is defined as a process which calls itself directly or indirectly and the corresponding function is called a recursive function.
Example 1 : Sum of Natural Numbers
Let us consider a problem to find the sum of natural numbers, there are several ways of doing that but the simplest approach is simply to add the numbers starting from 0 to n. So the function simply looks like this,
approach(1) - Simply adding one by one (Iterative Approach)
f(n) = 1 + 2 + 3 +...…..+ n
but there is another mathematical approach of representing this,
approach(2) - Recursive adding (Recursive Approach)
f(n) = 1 n=1
f(n) = n + f(n-1) n>=1
C++
#include <iostream>
using namespace std;
// Recursive function to find the sum of
// numbers from 0 to n
int findSum(int n)
{
// Base case
if (n == 1)
return 1;
// Recursive case
return n + findSum(n - 1);
}
int main()
{
int n = 5;
cout << findSum(n);
return 0;
}
Java
// Recursive function to find the sum of
// numbers from 0 to n
class Main {
static int findSum(int n) {
// Base case
if (n == 1)
return 1;
// Recursive case
return n + findSum(n - 1);
}
public static void main(String[] args) {
int n = 5;
System.out.println(findSum(n));
}
}
Python
# Recursive function to find the sum of
# numbers from 0 to n
def find_sum(n):
# Base case
if n == 1:
return 1
# Recursive case
return n + find_sum(n - 1)
n = 5
print(find_sum(n))
C#
// Recursive function to find the sum of
// numbers from 0 to n
using System;
class Program {
static int FindSum(int n) {
// Base case
if (n == 1)
return 1;
// Recursive case
return n + FindSum(n - 1);
}
static void Main() {
int n = 5;
Console.WriteLine(FindSum(n));
}
}
JavaScript
// Recursive function to find the sum of
// numbers from 0 to n
function findSum(n) {
// Base case
if (n === 1)
return 1;
// Recursive case
return n + findSum(n - 1);
}
const n = 5;
console.log(findSum(n));
Example 2 : Factorial of a Number
The factorial of a number n
(where n >= 0
) is the product of all positive integers from 1 to n
. To compute the factorial recursively, we calculate the factorial of n
by using the factorial of (n-1)
. The base case for the recursive function is when n = 0
, in which case we return 1.
C++
#include <iostream>
using namespace std;
int fact(int n)
{
// BASE CONDITION
if (n == 0)
return 1;
return n * fact(n - 1);
}
int main()
{
cout << "Factorial of 5 : " << fact(5);
return 0;
}
Java
public class Factorial {
static int fact(int n) {
// BASE CONDITION
if (n == 0)
return 1;
return n * fact(n - 1);
}
public static void main(String[] args) {
System.out.println("Factorial of 5 : " + fact(5));
}
}
Python
def fact(n):
# BASE CONDITION
if n == 0:
return 1
return n * fact(n - 1)
print("Factorial of 5 : ", fact(5))
C#
using System;
class Program {
static int Fact(int n) {
// BASE CONDITION
if (n == 0)
return 1;
return n * Fact(n - 1);
}
static void Main() {
Console.WriteLine("Factorial of 5 : " + Fact(5));
}
}
JavaScript
// Function to calculate factorial
function fact(n) {
// BASE CONDITION
if (n === 0)
return 1;
return n * fact(n - 1);
}
console.log("Factorial of 5 : " + fact(5));
OutputFactorial of 5 : 120
Example 3 : Fibonacci with Recursion
Write a program and recurrence relation to find the Fibonacci series of n where n >= 0.
Mathematical Equation:
n if n == 0, n == 1;
fib(n) = fib(n-1) + fib(n-2) otherwise;
Recurrence Relation:
T(n) = T(n-1) + T(n-2) + O(1)
C++
// C++ code to implement Fibonacci series
#include <bits/stdc++.h>
using namespace std;
// Function for fibonacci
int fib(int n)
{
// Stop condition
if (n == 0)
return 0;
// Stop condition
if (n == 1 || n == 2)
return 1;
// Recursion function
else
return (fib(n - 1) + fib(n - 2));
}
// Driver Code
int main()
{
// Initialize variable n.
int n = 5;
cout<<"Fibonacci series of 5 numbers is: ";
// for loop to print the fibonacci series.
for (int i = 0; i < n; i++)
{
cout<<fib(i)<<" ";
}
return 0;
}
Java
// Function for fibonacci
public class Fibonacci {
public static int fib(int n) {
// Stop condition
if (n == 0)
return 0;
// Stop condition
if (n == 1 || n == 2)
return 1;
// Recursion function
else
return (fib(n - 1) + fib(n - 2));
}
public static void main(String[] args) {
// Initialize variable n.
int n = 5;
System.out.print("Fibonacci series of 5 numbers is: ");
// for loop to print the fibonacci series.
for (int i = 0; i < n; i++) {
System.out.print(fib(i) + " ");
}
}
}
Python
# Function for fibonacci
def fib(n):
# Stop condition
if n == 0:
return 0
# Stop condition
if n == 1 or n == 2:
return 1
# Recursion function
else:
return fib(n - 1) + fib(n - 2)
# Driver Code
if __name__ == '__main__':
# Initialize variable n.
n = 5
print("Fibonacci series of 5 numbers is:", end=' ')
# for loop to print the fibonacci series.
for i in range(n):
print(fib(i), end=' ')
C#
// Function for fibonacci
using System;
class Fibonacci {
public static int Fib(int n) {
// Stop condition
if (n == 0)
return 0;
// Stop condition
if (n == 1 || n == 2)
return 1;
// Recursion function
else
return Fib(n - 1) + Fib(n - 2);
}
static void Main() {
// Initialize variable n.
int n = 5;
Console.Write("Fibonacci series of 5 numbers is: ");
// for loop to print the fibonacci series.
for (int i = 0; i < n; i++) {
Console.Write(Fib(i) + " ");
}
}
}
JavaScript
// Function for fibonacci
function fib(n) {
// Stop condition
if (n === 0)
return 0;
// Stop condition
if (n === 1 || n === 2)
return 1;
// Recursion function
else
return fib(n - 1) + fib(n - 2);
}
// Driver Code
let n = 5;
console.log("Fibonacci series of 5 numbers is:");
// for loop to print the fibonacci series.
for (let i = 0; i < n; i++) {
process.stdout.write(fib(i) + " ");
}
OutputFibonacci series of 5 numbers is: 0 1 1 2 3
Properties of Recursion
Recursion has some important properties. Some of which are mentioned below:
- The primary property of recursion is the ability to solve a problem by breaking it down into smaller sub-problems, each of which can be solved in the same way.
- A recursive function must have a base case or stopping criteria to avoid infinite recursion.
- Recursion involves calling the same function within itself, which leads to a call stack.
- Recursive functions may be less efficient than iterative solutions in terms of memory and performance.
Types of Recursion
- Direct recursion: When a function is called within itself directly it is called direct recursion. This can be further categorised into four types:
- Tail recursion,
- Head recursion,
- Tree recursion and
- Nested recursion.
- Indirect recursion: Indirect recursion occurs when a function calls another function that eventually calls the original function and it forms a cycle.
To learn more about types of recursion, refer to this article.
Applications of Recursion
Recursion is used in many fields of computer science and mathematics, which includes:
- Searching and sorting algorithms: Recursive algorithms are used to search and sort data structures like trees and graphs.
- Mathematical calculations: Recursive algorithms are used to solve problems such as factorial, Fibonacci sequence, etc.
- Compiler design: Recursion is used in the design of compilers to parse and analyze programming languages.
- Graphics: many computer graphics algorithms, such as fractals and the Mandelbrot set, use recursion to generate complex patterns.
- Artificial intelligence: recursive neural networks are used in natural language processing, computer vision, and other AI applications.
Advantages of Recursion:
- Recursion can simplify complex problems by breaking them down into smaller, more manageable pieces.
- Recursive code can be more readable and easier to understand than iterative code.
- Recursion is essential for some algorithms and data structures.
- Also with recursion, we can reduce the length of code and become more readable and understandable to the user/ programmer.
Disadvantages of Recursion:
- Recursion can be less efficient than iterative solutions in terms of memory and performance.
- Recursive functions can be more challenging to debug and understand than iterative solutions.
- Recursion can lead to stack overflow errors if the recursion depth is too high.
What else can you read?
Introduction of Recursion
Application's of Recursion
Writing base case in Recursion
Similar Reads
Introduction to Recursion The process in which a function calls itself directly or indirectly is called recursion and the corresponding function is called a recursive function. A recursive algorithm takes one step toward solution and then recursively call itself to further move. The algorithm stops once we reach the solution
14 min read
What is Recursion? Recursion is defined as a process which calls itself directly or indirectly and the corresponding function is called a recursive function.Example 1 : Sum of Natural Numbers Let us consider a problem to find the sum of natural numbers, there are several ways of doing that but the simplest approach is
8 min read
Difference between Recursion and Iteration A program is called recursive when an entity calls itself. A program is called iterative when there is a loop (or repetition).Example: Program to find the factorial of a number C++#include<iostream> using namespace std; // ----- Recursion ----- // method to find // factorial of given number in
5 min read
Types of Recursions What is Recursion? The process in which a function calls itself directly or indirectly is called recursion and the corresponding function is called a recursive function. Using recursive algorithm, certain problems can be solved quite easily. Examples of such problems are Towers of Hanoi (TOH), Inord
15+ min read
Finite and Infinite Recursion with examples The process in which a function calls itself directly or indirectly is called Recursion and the corresponding function is called a Recursive function. Using Recursion, certain problems can be solved quite easily. Examples of such problems are Towers of Hanoi (TOH), Inorder/Preorder/Postorder Tree Tr
6 min read
What is Tail Recursion Tail recursion is defined as a recursive function in which the recursive call is the last statement that is executed by the function. So basically nothing is left to execute after the recursion call.For example the following function print() is tail recursive.C++// An example of tail recursive funct
7 min read
What is Implicit recursion? What is Recursion? Recursion is a programming approach where a function repeats an action by calling itself, either directly or indirectly. This enables the function to continue performing the action until a particular condition is satisfied, such as when a particular value is reached or another con
5 min read
Why is Tail Recursion optimization faster than normal Recursion? Tail recursion is defined as a recursive function in which the recursive call is the last statement that is executed by the function. So basically nothing is left to execute after the recursion call.Why is tail recursion optimization faster than normal recursion?In non-tail recursive functions, afte
4 min read
Recursive Functions A Recursive function can be defined as a routine that calls itself directly or indirectly. In other words, a recursive function is a function that solves a problem by solving smaller instances of the same problem. This technique is commonly used in programming to solve problems that can be broken do
4 min read
Difference Between Recursion and Induction Recursion and induction are fundamental ideas in computer science and mathematics that might be regularly used to solve problems regarding repetitive structures. Recursion is a programming technique in which a function calls itself to solve the problem, whilst induction is a mathematical proof techn
4 min read