Recursion Chapter 12.

Slides:



Advertisements
Similar presentations
Factorial Recursion stack Binary Search Towers of Hanoi
Advertisements

Lesson 19 Recursion CS1 -- John Cole1. Recursion 1. (n) The act of cursing again. 2. see recursion 3. The concept of functions which can call themselves.
Chapter 10 Recursion Instructor: alkar/demirer. Copyright ©2004 Pearson Addison-Wesley. All rights reserved.10-2 Recursive Function recursive functionThe.
Chapter 10 Recursion Dr. Jiung-yao Huang Dept. Comm. Eng. Nat. Chung Cheng Univ. TA: 鄭筱親 陳昱豪.
1 Chapter 18 Recursion Dale/Weems/Headington. 2 Chapter 18 Topics l Meaning of Recursion l Base Case and General Case in Recursive Function Definitions.
Recursion A recursive function is a function that calls itself either directly or indirectly through another function. The problems that can be solved.
CENG 7071 Recursion. CENG 7072 Recursion Recursion is a technique that solves a problem by solving a smaller problem of the same type. A recursive function.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 19: Recursion.
Modular Programming Chapter Value and Reference Parameters t Function declaration: void computesumave(float num1, float num2, float& sum, float&
Recursion Chapter Nature of Recursion t Problems that lend themselves to a recursive solution have the following characteristics: –One or more.
Chapter 2 Recursion: The Mirrors CS Data Structures Mehmet H Gunes Modified from authors’ slides.
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 12: Recursion Problem Solving, Abstraction, and Design using C++
Modular Programming Chapter Value and Reference Parameters computeSumAve (x, y, sum, mean) ACTUALFORMAL xnum1(input) ynum2(input) sumsum(output)
Programming Principles II Lecture Notes 5 Recursion Andreas Savva.
1 Lecture 14 Chapter 18 - Recursion. 2 Chapter 18 Topics l Meaning of Recursion l Base Case and General Case in Recursive Function Definitions l Writing.
1 Chapter 13 Recursion. 2 Chapter 13 Topics l Meaning of Recursion l Base Case and General Case in Recursive Function Definitions l Writing Recursive.
1 Recursion. 2 Chapter 15 Topics  Meaning of Recursion  Base Case and General Case in Recursive Function Definitions  Writing Recursive Functions with.
Recursion Textbook chapter Recursive Function Call a recursive call is a function call in which the called function is the same as the one making.
1 7.Algorithm Efficiency What to measure? Space utilization: amount of memory required  Time efficiency: amount of time required to process the data Depends.
Recursion. Circular Definition Circular definition Circular definition Dialectic materialism is materialism that is dialectic. Dialectic materialism is.
Review Introduction to Searching External and Internal Searching Types of Searching Linear or sequential search Binary Search Algorithms for Linear Search.
1 7.Algorithm Efficiency What to measure? Space utilization: amount of memory required  Time efficiency: amount of time required to process the data.
Current Assignments Homework 3 is due tonight. Iteration and basic functions. Exam 1 on Monday.
CSC 221: Recursion. Recursion: Definition Function that solves a problem by relying on itself to compute the correct solution for a smaller version of.
1 Recursion. 2 Chapter 15 Topics  Meaning of Recursion  Base Case and General Case in Recursive Function Definitions  Writing Recursive Functions with.
© Janice Regan, CMPT 128, February CMPT 128: Introduction to Computing Science for Engineering Students Recursion.
1 Chapter 8 Recursion. 2 Objectives  To know what is a recursive function and the benefits of using recursive functions (§8.1).  To determine the base.
Maitrayee Mukerji. Factorial For any positive integer n, its factorial is n! is: n! = 1 * 2 * 3 * 4* ….* (n-1) * n 0! = 1 1 ! = 1 2! = 1 * 2 = 2 5! =
chap10 Chapter 10 Recursion chap10 2 Recursive Function recursive function The recursive function is a kind of function that calls.
Program Development and Design Using C++, Third Edition
1 7.Algorithm Efficiency These factors vary from one machine/compiler (platform) to another  Count the number of times instructions are executed So, measure.
1 CSC 143 Recursion [Reading: Chapter 17]. 2 Recursion  A recursive definition is one which is defined in terms of itself.  Example:  Sum of the first.
Lecture 11 Recursion. A recursive function is a function that calls itself either directly, or indirectly through another function; it is an alternative.
1 Dr. Chow-Sing LinRecursion - CH 10 Problem Solving and Program Design in C Chapter 9 Recursion Chow-Sing Lin.
Chapter 9 Recursion. Copyright ©2004 Pearson Addison-Wesley. All rights reserved.10-2 Recursive Function recursive functionThe recursive function is –a.
Looping I (while statement). CSCE 1062 Outline  Looping/repetition construct  while statement (section 5.1)
Recursion Powerful Tool
Andy Wang Object Oriented Programming in C++ COP 3330
Chapter 13 Recursion Copyright © 2016 Pearson, Inc. All rights reserved.
Recursion CENG 707.
Chapter Topics Chapter 16 discusses the following main topics:
Chapter 19: Recursion.
COMP 51 Week Fourteen Recursion.
Recursion CENG 707.
Recursion The programs discussed so far have been structured as functions that invoke one another in a disciplined manner For some problems it is useful.
Topic 6 Recursion.
Data Structures with Java © Rick Mercer
Chapter 15 Recursion.
Chapter 10 Recursion Instructor: Yuksel / Demirer.
Chapter 10 Recursion Dr. Jiung-yao Huang Dept. Comm. Eng.
Recursion: The Mirrors
Chapter 17 Recursion.
Chapter 6: Modular Programming
Chapter 15 Recursion.
Andy Wang Object Oriented Programming in C++ COP 3330
Data Structures Recursion CIS265/506: Chapter 06 - Recursion.
Programming with Recursion
7.2 Recursive Definitions of Mathematical Formulas
Announcements Final Exam on August 17th Wednesday at 16:00.
Chapter 14: Recursion Starting Out with C++ Early Objects
Chapter 14: Recursion Starting Out with C++ Early Objects
Fundamentals of Programming
Announcements Final Exam on August 19th Saturday at 16:00.
Recursion Chapter 18.
Chapter 17 Recursion.
Chapter 17 Recursion.
Yan Shi CS/SE 2630 Lecture Notes
Chapter 18 Recursion.
Chapter 3 :Recursion © 2011 Pearson Addison-Wesley. All rights reserved.
7.2 Recursive Definitions of Mathematical Formulas
Presentation transcript:

Recursion Chapter 12

12.1 Nature of Recursion Problems that lend themselves to a recursive solution have the following characteristics: One or more simple case of the problem have a straightforward, non-recursive solution Otherwise, use reduced cases of the problem that are closer to a stopping case Eventually the problem can be reduced to stopping cases only. Easy to solve

Nature of Recursion Splitting a problem into smaller problems Size n

Power by Multiplication Raise 6 to the power of 3 Raise 6 to the power of 22 Multiply the result by 6 Raise 6 to the power of 2 Raise 6 to the power of 1 Multiplying 6 * 6 * 6

Power.cpp // FILE: Power.cpp // RECURSIVE POWER FUNCTION // Raises its first argument to the power // indicated by its second argument. // Pre: m and n are defined and > 0. // Post: Returns m raised to power n. int power (int m, int n) { if (n <= 1) return m; else return m + power (m, n - 1); }

12.2 Tracing Recursive Functions Hand tracing we see how algorithm works Very useful in recursion Previous Multiply example trace “Activation Frame” corresponds to a function call Darker shading shows the depth of recursion

Trace of Power

Recursive Function with No Return Value If statement with some stopping condition n <= 1; When TRUE stopping case is reached recursive step is finished falls back to previous calls (if any) trace of reverse ReverseTest.cpp

ReverseTest.cpp #include <iostream> using namespace std; void reverse(); int main () { reverse(); cout << endl; return 0; }

ReverseTest.cpp void reverse() { char next; cout << "Next character or * to stop: "; cin >> next; if (next != ‘*’) reverse(); cout << next; }

Reverse Trace

Argument and Local Variable Stacks How does C++ keep track of n and next ? Uses a data structure called a stack Think of a stack of trays in a cafeteria Each time a function is called it is pushed onto the stack Only top values are used when needed (popping) Example of calls to reverse

Recursive String After 1st call to reverse n next 3 ? top c is read into next just prior to 2nd call 3 c top

Recursive String After 2nd call to reverse n next 2 ? top 3 c letter a is read into next just prior to 3rd call 2 a top

Recursive String After 3rd call to reverse n next 1 ? top 2 a 3 c letter t is read into next printed due to stop case 1 t top

Recursive String After 1st return After 2nd return n next 2 a top 3 c After 2nd return After 3rd return (final) ? ?

12.3 Recursive Mathematical Functions Many mathematical functions are defined recursively factorial n! of a number 0! = 1 n! = n * *n-1)! for n > 0 So 4! = 4 * 3 * 2 * 1 or 24 Look at a block of recursive math function example source code files

Factorial.cpp // FILE: Factorial.cpp // RECURSIVE FACTORIAL FUNCTION // COMPUTES N! int factorial (int n) { if (n <= 0) return 1; else return n * factorial (n-1); }

Factorial Trace

FactorialI.cpp // FILE: FactorialI.cpp // ITERATIVE FACTORIAL FUNCTION // COMPUTES N! int factorialI (int n) { int factorial; factorial = 1; for (int i = 2; i <= n; i++) factorial *= i; return factorial; }

Fibonacci.cpp // FILE: Fibonacci.cpp // RECURSIVE FIBONACCI NUMBER FUNCTION int fibonacci (int n) // Pre: n is defined and n > 0. // Post: None // Returns: The nth Fibonacci number. { if (n <= 2) return 1; else return fibonacci (n - 2) + fibonacci (n - 1); }

GCDTest.cpp // FILE: gcdTest.cpp // Program and recursive function to find // greatest common divisor #include <iostream> using namespace std; // Function prototype int gcd(int, int);

GCDTest.cpp int main() { int m, n; // the two input items cout << "Enter two positive integers: "; cin >> m >> n; cout << endl; cout << "Their greatest common divisor is " << gcd(m, n) << endl; return 0; }

GCDTest.cpp // Finds the greatest common divisor of two // integers // Pre: m and n are defined and both are > 0. // Post: None // Returns: The greatest common divisor of m and // n. int gcd(int m, int n) { if (m < n) return gcd(n, m);

GCDTest.cpp else if (m % n == 0) return n; else return gcd(n, m % n); // recursive step }

GCDTest.cpp Program Output Enter two positive integers separated by a space: 24 84 Their greatest common divisor is 12

12.4 Recursive Functions with Array Arguments // File: findSumTest.cpp // Program and recursive function to sum an // array's elements #include <iostream> using namespace std; // Function prototype int findSum(int[], int); int binSearch(int[], int, int, int);

FindSumTest.cpp int main() { const int SIZE = 10; int x[SIZE]; int sum1; int sum2; // Fill array x for (int i = 0; i < SIZE; i++) x[i] = i + 1;

FindSumTest.cpp // Calulate sum two ways sum1 = findSum(x, SIZE); sum2 = (SIZE * (SIZE + 1)) / 2; cout << "Recursive sum is " << sum1 << endl; cout << "Calculated sum is " << sum2 << endl; cout << binSearch(x, 10, 10, SIZE-1) << endl; return 0; }

FindSumTest.cpp // Finds the sum of integers in an n-element // array int findSum(int x[], int n) { if (n == 1) return x[0]; else return x[n-1] + findSum(x, n-1); }

FindSumTest.cpp // Searches for target in elements first through // last of array // Precondition : The elements of table are // sorted & first and last are defined. // Postcondition: If target is in the array, // return its position; otherwise, returns -1. int binSearch (int table[], int target, int first, int last) { int middle;

FindSumTest.cpp middle = (first + last) / 2; if (first > last) return -1; else if (target == table[middle]) return middle; else if (target < table[middle]) return binSearch(table, target, first, middle-1); else return binSearch(table, target, middle+1, last); }

12.5 Problem Solving with Recursion Case Study: The Towers of Hanoi Problem Statement Solve the Towers of Hanoi problem for n disks, where n is the number of disks to be moved from tower A to tower c Problem Analysis Solution is a printed list of each disk move. Recursive function that can be used to move any number of disks from one tower to the other tower.

Towers of Hanoi Program Design If n is 1 else move disk 1 from fromTower to toTower else move n-1 disks from fromTower to aux tower using the toTower move disk n from the fromTower to the toTower move n-1 disks from aux tower to the toTower using fromTower

Towers of Hanoi Program Implementation Program Verification & Test Towers.cpp Program Verification & Test towers (‘A’, ’C’, ‘B’, 3); Towers trace

Tower.cpp // File: tower.cpp // Recursive tower of hanoi function #include <iostream> using namespace std; void tower(char, char, char, int); int main() { int numDisks; // input - number of disks

Tower.cpp cout << "How many disks: "; cin >> numDisks; tower('A', 'C', 'B', numDisks); return 0; } // Recursive function to "move" n disks from // fromTower to toTower using auxTower // Pre: The fromTower, toTower, auxTower, and // n are defined. // Post: Displays the required moves.

Tower.cpp void tower (char fromTower, char toTower, char auxTower, int n) { if (n == 1) cout << "Move disk 1 from tower " << fromTower << " to tower " << toTower << endl; else

Tower.cpp tower(fromTower, auxTower, toTower, n-1); cout << "Move disk " << n << " from tower "<< fromTower << " to tower " << toTower << endl; tower(auxTower, toTower, fromTower, n-1); } } // end tower

Towers Trace

TowerTest.cpp Program Output Move disk 1 from tower A to tower C Move disk 2 from tower A to tower B Move disk 1 from tower C to tower B Move disk 3 from tower A to tower C Move disk 1 from tower B to tower A Move disk 2 from tower B to tower C

12.6 Common Programming Errors Stopping conditions Missing return statements Optimizations recursion of arrays use large amounts of memory use care when tracing your solutions