120 likes | 179 Views
Recursion. Reading – Chapter 10. Recursion. The process of solving a problem by reducing it to smaller versions of itself Example: Sierpinski’s Triangle. Recursive algorithm. An algorithm is called recursive if it solves a problem by reducing the problem to smaller versions of itself
E N D
Recursion Reading – Chapter 10
Recursion • The process of solving a problem by reducing it to smaller versions of itself • Example: Sierpinski’s Triangle
Recursive algorithm • An algorithm is called recursive if it solves a problem by reducing the problem to smaller versions of itself • A recursive algorithm can be implemented using a recursive function
Recursive function • A function that calls itself • What is the danger? • we need to avoid infinite recursion • A recursive function must have • recursive call(s) to the function with a smaller instance of the problem • one or more base cases to stop recursion
Finding a recursive solution • A recursive solution to a problem must be written carefully • The idea is for each successive recursive call to take us one step closer to the base case (a situation in which the problem can easily be solved)
General format formany recursive functions if (some easily-solved condition) // base case solution statement(s); else // general case recursive function call(s);
Example • Write a recursive function Fact() to find the factorial of n. • What should Fact(4) return? • What can be a good base case that represents an easily-solved situation? • What can be a good general case that takes us closer to the base case?
Example int Fact (int n) { if (n == 1) // base case return 1; else // general case return n * Fact(n-1); } // this is an example of tail recursion
Example – Trace of calls Returns 4 * Fact(3) = 4 * 6 = 24 Call 1: Fact(4) n = 4 Returns 3 * Fact(2) = 3 * 2 = 6 Call 2: Fact(3) n = 3 Returns 2 * Fact(1) = 2 * 1 = 2 Call 3: Fact(2) n = 2 n = 1 Returns 1 Call 4: Fact(1) n = 1
Iteration or Recursion? • Key factors • nature of the problem • efficiency • Every recursive call has its own set of parameters and local variables • time and space overhead associated with executing a recursive function • Certain problems are inherently recursive and a recursive solution is the most natural one