Recursive functions help solve problems by calling themselves with smaller parts of the problem. This makes some tasks easier to understand and write.
Recursive functions in R Programming
recursive_function <- function(parameter) {
if (base_case_condition) {
return(base_case_value)
} else {
return(recursive_function(smaller_parameter))
}
}The base case stops the recursion to avoid infinite loops.
Each recursive call should work on a smaller or simpler input.
factorial <- function(n) {
if (n == 0) {
return(1) # base case
} else {
return(n * factorial(n - 1))
}
}factorial(0) # returns 1, base case example
factorial(1) # returns 1, smallest positive number factorial
factorial(5) # returns 120, recursive calls multiply down to base case
This program defines a recursive function to calculate factorial. It prints the factorial of 5 and the base case factorial of 0.
factorial <- function(number) {
if (number == 0) {
return(1) # base case
} else {
return(number * factorial(number - 1))
}
}
# Print factorial of 5
print(paste("Factorial of 5 is", factorial(5)))
# Print factorial of 0 (edge case)
print(paste("Factorial of 0 is", factorial(0)))Time complexity is O(n) because the function calls itself n times.
Space complexity is O(n) due to the call stack growing with each call.
Common mistake: forgetting the base case causes infinite recursion and crashes.
Use recursion when the problem naturally breaks down into smaller similar problems; otherwise, loops might be simpler.
Recursive functions call themselves with smaller inputs.
Always include a base case to stop recursion.
Useful for problems like factorial, Fibonacci, and tree traversal.
Practice
recursive function?Solution
Step 1: Understand recursion basics
A recursive function calls itself repeatedly with smaller inputs.Step 2: Identify the role of base case
The base case stops the recursion to avoid infinite loops and eventual crash.Final Answer:
To stop the recursion and prevent infinite calls -> Option AQuick Check:
Base case = stop recursion [OK]
- Forgetting the base case causes infinite recursion
- Thinking base case calls function again
- Confusing base case with recursive step
fact in R that calculates factorial?Solution
Step 1: Check base case and recursive call
fact <- function(n) { if(n == 0) 1 else n * fact(n - 1) } correctly uses if condition for base case (n == 0) and recursive call with n-1.Step 2: Identify syntax errors in other options
Options B, C, and D misuse loops or have wrong base case or missing else.Final Answer:
fact <- function(n) { if(n == 0) 1 else n * fact(n - 1) } -> Option DQuick Check:
Correct base case and recursive call syntax [OK]
- Using loops instead of recursion
- Missing else leads to errors
- Wrong base case condition
fib <- function(n) {
if (n <= 1) return(n)
else return(fib(n-1) + fib(n-2))
}
fib(4)Solution
Step 1: Trace fib(4) calls
fib(4) = fib(3) + fib(2); fib(3) = fib(2) + fib(1); fib(2) = fib(1) + fib(0)Step 2: Calculate values bottom-up
fib(1)=1, fib(0)=0; fib(2)=1+0=1; fib(3)=1+1=2; fib(4)=2+1=3Final Answer:
3 -> Option CQuick Check:
Fibonacci(4) = 3 [OK]
- Confusing index starting at 0 or 1
- Adding wrong recursive calls
- Forgetting base cases
sum_to_n <- function(n) {
if (n == 1) return(1)
else return(n + sum_to_n(n))
}
sum_to_n(3)Solution
Step 1: Check recursive call argument
The function calls sum_to_n(n) instead of sum_to_n(n-1), so input never decreases.Step 2: Understand effect of error
This causes infinite recursion because n stays the same and base case is never reached.Final Answer:
The recursive call uses the same n, causing infinite recursion -> Option AQuick Check:
Recursive call must reduce input [OK]
- Calling function with same argument
- Missing base case
- Confusing recursion with loops
flatten_list that takes a nested list of numbers and returns a flat vector of all numbers.What is the correct approach?
Solution
Step 1: Identify recursive structure
Nested lists require checking each element; if it's a list, call flatten_list recursively.Step 2: Combine results properly
Combine all flattened elements into one vector to get a flat list of numbers.Final Answer:
Check if input is a list; if yes, recursively flatten each element and combine; else return the element as vector -> Option BQuick Check:
Recursion + combine results = flatten list [OK]
- Not combining recursive results
- Forgetting to check if element is a list
- Using loops only without recursion
Ready to prove it?
Pass the test and this pattern moves unknown
