Bird
Raised Fist0
Bash Scriptingscripting~5 mins

Recursive functions in Bash Scripting - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a recursive function in bash scripting?
A recursive function is a function that calls itself to solve smaller parts of a problem until it reaches a base case to stop.
Click to reveal answer
beginner
Why do recursive functions need a base case?
The base case stops the recursion by providing a condition where the function no longer calls itself, preventing infinite loops.
Click to reveal answer
beginner
How do you define a recursive function in bash?
You define a function normally and inside it, call the same function with a changed argument to approach the base case.
Click to reveal answer
beginner
Example: What does this bash recursive function do?

function countdown() {
  if [ $1 -le 0 ]; then
    echo "Done!"
  else
    echo "$1"
    countdown $(( $1 - 1 ))
  fi
}
This function counts down from the given number to zero, printing each number, then prints "Done!" when it reaches zero.
Click to reveal answer
intermediate
What happens if a recursive function in bash has no base case?
The function will call itself endlessly, causing the script to crash or run out of memory (stack overflow).
Click to reveal answer
What is the purpose of the base case in a recursive bash function?
ATo print the function name
BTo start the recursion
CTo stop the recursion and prevent infinite calls
DTo call another script
In bash, how do you call a function named 'factorial' with argument 5?
Acall factorial(5)
Bfactorial 5
Cfactorial(5)
Drun factorial 5
What will happen if a recursive bash function never reaches its base case?
AIt will print the base case automatically
BIt will skip recursion
CIt will return zero immediately
DIt will run forever until the system stops it
Which of these is a valid base case for a countdown function in bash?
Aif [ $1 -le 0 ]; then echo "Done"; fi
Bif [ $1 -gt 0 ]; then echo "Done"; fi
Cif [ $1 -eq 10 ]; then echo "Done"; fi
Dif [ $1 -lt 0 ]; then echo "Start"; fi
What does this line do in a recursive bash function? countdown $(( $1 - 1 ))
ACalls countdown with the argument decreased by 1
BEnds the function
CPrints the current argument
DIncreases the argument by 1
Explain how a recursive function works in bash and why a base case is important.
Think about how you solve a big problem by breaking it into smaller ones.
You got /3 concepts.
    Write a simple recursive bash function that counts down from a number to zero and prints "Done!" at the end.
    Use if to check if number is zero or less, else call function again with smaller number.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of a base case in a recursive Bash function?
      easy
      A. To increase the input value for the next call
      B. To call the function again with the same input
      C. To print the current value of a variable
      D. To stop the recursion and prevent infinite loops

      Solution

      1. Step 1: Understand recursion basics

        A recursive function calls itself repeatedly with smaller inputs.
      2. Step 2: Role of base case

        The base case stops the recursion to avoid infinite loops and eventual crash.
      3. Final Answer:

        To stop the recursion and prevent infinite loops -> Option D
      4. Quick Check:

        Base case = stop recursion [OK]
      Hint: Base case always stops recursion to avoid endless calls [OK]
      Common Mistakes:
      • Forgetting the base case causes infinite recursion
      • Using base case to increase input instead of stopping
      • Confusing base case with recursive step
      2. Which of the following is the correct syntax to define a recursive function named countdown in Bash?
      easy
      A. countdown() { while [ $1 -gt 0 ]; do echo $1; (( $1-- )); done; echo Done; }
      B. def countdown(n): if n <= 0: print('Done') else: print(n) countdown(n-1)
      C. function countdown() { if [[ $1 -le 0 ]]; then echo Done; else echo $1; countdown $(( $1 - 1 )); fi }
      D. function countdown { echo $1; countdown $(( $1 - 1 )); }

      Solution

      1. Step 1: Identify Bash function syntax

        Bash functions use the syntax: function name() { commands; } or name() { commands; }.
      2. Step 2: Check recursive call and base case

        function countdown() { if [[ $1 -le 0 ]]; then echo Done; else echo $1; countdown $(( $1 - 1 )); fi } correctly defines a function with a base case (if $1 <= 0) and recursive call countdown $(( $1 - 1 )).
      3. Final Answer:

        function countdown() { if [[ $1 -le 0 ]]; then echo Done; else echo $1; countdown $(( $1 - 1 )); fi } -> Option C
      4. Quick Check:

        Bash recursion syntax = function countdown() { if [[ $1 -le 0 ]]; then echo Done; else echo $1; countdown $(( $1 - 1 )); fi } [OK]
      Hint: Look for Bash syntax with base case and recursive call [OK]
      Common Mistakes:
      • Using Python syntax in Bash function
      • Missing base case causing infinite recursion
      • Incorrect function declaration without parentheses
      3. What will be the output of this Bash script?
      factorial() {
        if [[ $1 -le 1 ]]; then
          echo 1
        else
          local prev=$(factorial $(( $1 - 1 )))
          echo $(( $1 * prev ))
        fi
      }
      factorial 3
      medium
      A. 1
      B. 6
      C. 3
      D. 9

      Solution

      1. Step 1: Understand factorial recursion

        factorial(3) calls factorial(2), which calls factorial(1). factorial(1) returns 1.
      2. Step 2: Calculate factorial values

        factorial(2) = 2 * 1 = 2; factorial(3) = 3 * 2 = 6.
      3. Final Answer:

        6 -> Option B
      4. Quick Check:

        3! = 6 [OK]
      Hint: Factorial n = n * factorial(n-1), factorial(1) = 1 [OK]
      Common Mistakes:
      • Confusing multiplication order
      • Forgetting base case returns 1
      • Assuming output is input value
      4. Identify the error in this recursive Bash function that calculates the sum of numbers from 1 to n:
      sum() {
        if [[ $1 -eq 0 ]]; then
          echo 0
        else
          echo $(( $1 + sum $(( $1 - 1 )) ))
        fi
      }
      sum 3
      medium
      A. Using echo inside arithmetic expression causes error
      B. Missing base case for $1 == 1
      C. Function name 'sum' is a reserved keyword
      D. Incorrect decrement syntax $(( $1 - 1 ))

      Solution

      1. Step 1: Analyze recursive call inside arithmetic

        The function calls sum recursively inside $(( ... )), but sum outputs text via echo, not a number directly.
      2. Step 2: Understand Bash arithmetic limitations

        Bash arithmetic expects numbers, but echo outputs string with newline, causing error.
      3. Final Answer:

        Using echo inside arithmetic expression causes error -> Option A
      4. Quick Check:

        Echo inside $(( )) = error [OK]
      Hint: Avoid echo inside $(( )); use command substitution instead [OK]
      Common Mistakes:
      • Assuming echo returns a number usable in arithmetic
      • Ignoring base case correctness
      • Thinking function name 'sum' is reserved
      5. You want to write a recursive Bash function list_files that prints all files in a directory and its subdirectories. Which approach correctly handles recursion and avoids infinite loops?
      hard
      A. Check if the argument is a directory; if yes, list files and call list_files on each subdirectory; else print the file name
      B. Call list_files on the directory without checking type, then print the directory name
      C. Use a loop to list files only in the current directory without recursion
      D. Call list_files on all files and directories without base case

      Solution

      1. Step 1: Understand recursive directory traversal

        To list files recursively, check if the argument is a directory; if so, process contents recursively.
      2. Step 2: Avoid infinite loops by checking file type

        Only recurse into directories; print file names directly to avoid infinite recursion.
      3. Final Answer:

        Check if the argument is a directory; if yes, list files and call list_files on each subdirectory; else print the file name -> Option A
      4. Quick Check:

        Directory check + recursive call = correct recursion [OK]
      Hint: Always check if input is directory before recursive call [OK]
      Common Mistakes:
      • Recursing without checking if input is directory
      • Missing base case causing infinite recursion
      • Not printing files when input is a file
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard