Recursion [click]
Telerik Academy Alpha

 

DSA

 Table of contents

What is recursion?

And why use it?

[click to understand]

 What is Recursion?

  • Function that calls itself

 What is Recursion?

  • Recursion is when a methods calls itself
    • Very powerful technique for implementing algorithms
  • Recursion should have
    • Exit criteria (bottom)
      • Prevents infinite recursion
    • Direct or indirect recursive call
      • Оr through other methods
      • The method calls itself directly

 Why Recursion?

  • Used in algorithms

    • Merge Sort

    • Binary Search

    • Typical for various operations related to Trees and other non-linear data structures

      • OS Folder structure traversal

      • HTML/DOM trees and other “Visual Trees” – WPF, WinForms

 Why Recursion?

  • Used in algorithms

    • DFS – graphs, also trees

    • Math - Factorial, Fibonacci, Combinatorial problems

  • Develops analytical thinking

  • High chance to be asked on interviews!

Examples

 

 Example: Factorial

  • Recursive definition of n! (n factorial):

 

\( n! = n * (n-1)! \) for n > 0

\( n! = 1 \) for n = 0

\( 5! = 5 * 4! = 5 * 4 * 3 * 2 * 1 * 1 = 120 \)

\( 4! = 4 * 3! = 4 * 3 * 2 * 1 *1 = 24 \)

\( 3! = 3 * 2! = 3 * 2 * 1 * 1 = 6 \)

\( 2! = 2 * 1! = 2 * 1 * 1 = 2 \)

\( 1! = 1 * 0! = 1 * 1 = 1 \)

\( 0! = 1 \)

 Example: Factorial

  • Recursive definition of n! (n factorial):
    • Don't try this at home!
      • Use iteration instead
static decimal Factorial(decimal num)
{
    if (num == 0)
    {
        return 1;
    }

    var result = num * Factorial(num - 1);
    return result;
}

Where is the bottom?

 Demo: Factorial

 Explain: Factorial

  • Diagram of recursive factorial function
    • every time we call it the function is executed with different parameters
    • when the bottom is hit (n<=1) it returns the stored values back

Where is the bottom?

 Example: String Reverse

Where is the bottom?

  • Debug the example in Visual Studio to understand how it is working

 Example: String Reverse

Where is the bottom?

  • You are already familiar with Binary Search
  • Now we need a volunteer to write pseudo-code Binary Search with the help of the Mentor

Backtracking

 

 Backtracking?

Solving Computational Problems by Generating All Candidates​

  • What is backtracking?
    • Backtracking is a class of algorithms for finding all solutions to some computational problem
    • E.g. find all paths from Sofia to Varna
  • How does backtracking work?
    • Usually implemented recursively
    • At each step we try all perspective possibilities to generate a solution
  • Backtracking has exponential running time!

 Backtracking?

 Path finder - demo

Recursion vs Iteration

 

 Recursion is harmful?

  • When used incorrectly the recursion could take too much memory and computing power
    • Example:

 Recursion is harmful?

  • The same value is calculated many, many times!

 Recursion done right

  • Each Fibonacci sequence member can be remembered once it is calculated (memoization)
    Can be returned directly when needed again
    • Example:

 When to use recursion?

  • Avoid recursion when an obvious iterative algorithm exists
    • Examples: factorial, Fibonacci numbers
  • Use recursion for combinatorial algorithm where at each step you need to recursively explore more than one possible continuation
    • Examples: permutations, all paths in labyrinth
    • If you have only one recursive call in the body of a recursive method, it can directly become iterative (like calculating factorial)

Questions?

[click]

[C# DSA] Recursion

By telerikacademy

[C# DSA] Recursion

  • 1,530