310 likes | 601 Views
Chapter 6. Recursion. Chapter 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
E N D
Chapter 6 Recursion Data Structures Using C++
Chapter 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 Data Structures Using C++
Recursive 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 Data Structures Using C++
Recursive 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 Data Structures Using C++
Recursive 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 Data Structures Using C++
Tracing 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 Data Structures Using C++
Tracing 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 Data Structures Using C++
Recursive 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 Data Structures Using C++
Designing Recursive Functions • Understand problem requirements • Determine limiting conditions • Identify base cases Data Structures Using C++
Designing 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 Data Structures Using C++
Recursive Factorial Function int fact(int num) { if(num == 0) return 1; else return num * fact(num – 1); } Data Structures Using C++
Recursive Factorial Trace Data Structures Using C++
Recursive 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 list[lowerIndex]; else { max = largest(list, lowerIndex + 1, upperIndex); if(list[lowerIndex] >= max) return list[lowerIndex]; else return max; } } Data Structures Using C++
Execution of largest(list, 0, 3) Data Structures Using C++
Recursive 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); } Data Structures Using C++
Execution of rFibonacci(2,3,5) Data Structures Using C++
Towers of Hanoi Problem with Three Disks Data Structures Using C++
Towers of Hanoi: Three Disk Solution Data Structures Using C++
Towers of Hanoi: Three Disk Solution Data Structures Using C++
Towers of Hanoi: Recursive Algorithm void moveDisks(int count, int needle1, int needle3, int needle2) { if(count > 0) { moveDisks(count - 1, needle1, needle2, needle3); cout<<"Move disk "<<count<<“ from "<<needle1 <<“ to "<<needle3<<"."<<endl; moveDisks(count - 1, needle2, needle3, needle1); } } Data Structures Using C++
Decimal to Binary: Recursive Algorithm void decToBin(int num, int base) { if(num > 0) { decToBin(num/base, base); cout<<num % base; } } Data Structures Using C++
Execution of decToBin(13,2) Data Structures Using C++
Recursion 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 Data Structures Using C++
Backtracking 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 Data Structures Using C++
Backtracking 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 Data Structures Using C++
Solution to 8-Queens Puzzle Data Structures Using C++
4-Queens Puzzle Data Structures Using C++
4-Queens Tree Data Structures Using C++
8 X 8 Square Board Data Structures Using C++
Chapter Summary • Recursive definitions • Recursive algorithms • Recursive functions • Base cases • General cases Data Structures Using C++
Chapter Summary • Tracing recursive functions • Designing recursive functions • Varieties of recursive functions • Recursion vs. Iteration • Backtracking • N-Queens puzzle Data Structures Using C++