Title: Recursion
1Chapter 6
2Chapter Objectives
- Learn about recursive definitions
- Explore the base case and the general case of a
recursive definition - Discover recursive algorithms
- Learn about recursive functions
- Explore how to use recursive functions to
implement recursive algorithms - Learn about recursion and backtracking
3Recursive Definitions
- Recursion
- Process of solving a problem by reducing it to
smaller versions of itself - Recursive definition
- Definition in which a problem is expressed in
terms of a smaller version of itself - Has one or more base cases
4Recursive Definitions
- Recursive algorithm
- Algorithm that finds the solution to a given
problem by reducing the problem to smaller
versions of itself - Has one or more base cases
- Implemented using recursive functions
- Recursive function
- function that calls itself
- Base case
- Case in recursive definition in which the
solution is obtained directly - Stops the recursion
5Recursive Definitions
- General solution
- Breaks problem into smaller versions of itself
- General case
- Case in recursive definition in which a smaller
version of itself is called - Must eventually be reduced to a base case
6Tracing a Recursive Function
- Recursive function
- Has unlimited copies of itself
- Every recursive call has
- its own code
- own set of parameters
- own set of local variables
7Tracing a Recursive Function
- After completing recursive call
- Control goes back to calling environment
- Recursive call must execute completely before
control goes back to previous call - Execution in previous call begins from point
immediately following recursive call
8Recursive Definitions
- Directly recursive a function that calls itself
- Indirectly recursive a function that calls
another function and eventually results in the
original function call - Tail recursive function recursive function in
which the last statement executed is the
recursive call - Infinite recursion the case where every
recursive call results in another recursive call
9Designing Recursive Functions
- Understand problem requirements
- Determine limiting conditions
- Identify base cases
10Designing Recursive Functions
- Provide direct solution to each base case
- Identify general case(s)
- Provide solutions to general cases in terms of
smaller versions of itself
11Recursive Factorial Function
- int fact(int num)
-
- if(num 0)
- return 1
- else
- return num fact(num 1)
12Recursive Factorial Trace
13Recursive Implementation Largest Value in Array
- int largest(const int list, int lowerIndex, int
upperIndex) -
- int max
- if(lowerIndex upperIndex) //the size of
the sublist is 1 - return listlowerIndex
- else
-
- max largest(list, lowerIndex 1,
upperIndex) - if(listlowerIndex gt max)
- return listlowerIndex
- else
- return max
-
14Execution of largest(list, 0, 3)
15Recursive Fibonacci
- int rFibNum(int a, int b, int n)
-
- if(n 1)
- return a
- else if(n 2)
- return b
- else
- return rFibNum(a, b, n - 1) rFibNum(a,
b, n - 2)
16Execution of rFibonacci(2,3,5)
17Towers of Hanoi Problem with Three Disks
18Towers of Hanoi Three Disk Solution
19Towers of Hanoi Three Disk Solution
20Towers of Hanoi Recursive Algorithm
- void moveDisks(int count, int needle1, int
needle3, int needle2) -
- if(count gt 0)
-
- moveDisks(count - 1, needle1, needle2,
needle3) - coutltlt"Move disk "ltltcountltlt from
"ltltneedle1 - ltlt to "ltltneedle3ltlt"."ltltendl
- moveDisks(count - 1, needle2, needle3,
needle1) -
21Decimal to Binary Recursive Algorithm
- void decToBin(int num, int base)
-
- if(num gt 0)
-
- decToBin(num/base, base)
- coutltltnum base
-
22Execution of decToBin(13,2)
23Recursion or Iteration?
- Two ways to solve particular problem
- Iteration
- Recursion
- Iterative control structures uses looping to
repeat a set of statements - Tradeoffs between two options
- Sometimes recursive solution is easier
- Recursive solution is often slower
24Backtracking Algorithm
- Attempts to find solutions to a problem by
constructing partial solutions - Makes sure that any partial solution does not
violate the problem requirements - Tries to extend partial solution towards
completion
25Backtracking Algorithm
- If it is determined that partial solution would
not lead to solution - partial solution would end in dead end
- algorithm backs up by removing the most recently
added part and then tries other possibilities
26Solution to 8-Queens Puzzle
274-Queens Puzzle
284-Queens Tree
298 X 8 Square Board
30Chapter Summary
- Recursive definitions
- Recursive algorithms
- Recursive functions
- Base cases
- General cases
31Chapter Summary
- Tracing recursive functions
- Designing recursive functions
- Varieties of recursive functions
- Recursion vs. Iteration
- Backtracking
- N-Queens puzzle