scala recursion with example

2/27/2025

Scala recursive function example

Go Back

Scala Recursion with Example: A Complete Guide

Scala recursive function example

Introduction

Recursion is a fundamental concept in programming where a function calls itself to solve a problem. In Scala, recursion is widely used in functional programming to write elegant and efficient solutions without relying on loops. In this article, we will explore recursion in Scala, understand its importance, and see practical examples of recursive functions.

What is Recursion in Scala?

Recursion in Scala is a process where a function calls itself to break down complex problems into simpler subproblems. It is particularly useful in scenarios like tree traversal, mathematical computations, and working with immutable data structures.

Syntax of Recursion

A recursive function follows a standard structure:

def functionName(parameters): ReturnType = {
  if (terminationCondition) baseCaseResult
  else recursiveFunctionCall
}

A recursive function must have:

  • A base case to stop the recursion.
  • A recursive case where the function calls itself with modified parameters.

Types of Recursion in Scala

There are two main types of recursion in Scala:

1. Direct Recursion

A function calls itself directly.

Example: Factorial Calculation

def factorial(n: Int): Int = {
  if (n == 0) 1  // Base case
  else n * factorial(n - 1)  // Recursive case
}

println(factorial(5)) // Output: 120

2. Tail Recursion

Tail recursion is a special form of recursion where the recursive call is the last operation in the function. The Scala compiler optimizes tail-recursive functions to prevent stack overflow using tail call optimization (TCO).

Example: Tail-Recursive Factorial

import scala.annotation.tailrec

def factorialTailRec(n: Int, accumulator: Int = 1): Int = {
  if (n == 0) accumulator
  else factorialTailRec(n - 1, n * accumulator)
}

println(factorialTailRec(5)) // Output: 120

Here, factorialTailRec uses an accumulator to store intermediate results, allowing the compiler to optimize it.

Advantages of Using Recursion in Scala

  • Improved Readability: Recursive solutions are often more readable than iterative loops.
  • Functional Programming Style: Recursion aligns with Scala’s functional paradigm.
  • Eliminates Mutable State: Since recursion avoids mutable variables, it enhances immutability and safety.

Common Use Cases of Recursion

  • Mathematical computations (Factorial, Fibonacci, GCD, etc.)
  • Tree and graph traversal (DFS, Binary Trees)
  • String manipulations (Reversal, Palindromes)
  • Working with lists and collections

Example: Fibonacci Series Using Recursion

def fibonacci(n: Int): Int = {
  if (n <= 1) n
  else fibonacci(n - 1) + fibonacci(n - 2)
}

println(fibonacci(6)) // Output: 8

This function computes the Fibonacci sequence recursively but is not tail-recursive. Optimizing it with tail recursion is advisable for large inputs.

Conclusion

Recursion is a powerful technique in Scala that enables elegant and efficient problem-solving. Understanding direct and tail recursion helps in writing optimized and scalable programs. While recursion can lead to stack overflow in deep recursive calls, tail recursion and Scala’s optimization techniques help mitigate this issue. Mastering recursion is essential for every Scala developer looking to enhance their functional programming skills.

 

Table of content