APS105 Recursion
A function is allowed to call itself! –Example:. A function calling itself is called “recursion” Such a function is called a “recursive” function –Why would you want to do this?
Recursion: Motivation Sometimes a prob has self-similar sub-probs –E.g., problems-within-a-problem –“inner” problems have same description as outer but inner problems are smaller in some way –inner problems themselves have inner problems Recursion continues until: –some small indivisible problem reached –or some other stopping condition is reached –called the “base case” or “terminating case” Note: –sometimes recursion can be expressed as a loop –or vice-versa
Recursion: Walking Across the Room Loop-based solution basic idea: –while not at the wall take another step Recursive solution basic idea:.
Recursion: Cake Cutting Cut a jelly-roll into equal parts < 100g each.
Reading/Evaluating Expressions Recall: BEDMAS: order of evaluation –Brackets –Exponents –Division & Multiplication –Addition & Subtraction Apply BEDMAS to every expression –and to every sub-expression within the expression
Example: Evaluating Expressions BEDMAS Example:.
Other Examples Finding your way out of a maze Fractals Solving a sudoku
Recursive Math Functions
Example: f(3):. Recursive Math Functions
. Implementing Recursion in C
. Factorial Using a Loop
. Factorial Using Recursion
. Factorial Using Recursion (again)
Printing Patterns with Recursion
. Print a Row of n Stars (recursively)
. Print a Row of n Stars (attempt2)
**** *** ** *. Print a Triangle of Stars
* ** *** ****. Print an Inverted Triangle of Stars
. What Will This Print?
Recursion and Strings
Can think of strings using a recursive definition –Example: one of these recursive definitions: –a string is a character followed by a string –a string is a character preceded by a string –a string is two characters with a string in the middle
Palindromes Palindrome: –a string that is the same backwards and forwards –Examples: racecar, level, civic, madam, noon Write a function to determine if a palindrome
. Function to test Palindrome
. Palindrome tester with a Helper
Greatest Common Divisor (GCD)
GCD Algorithm GCD of two numbers is –if the numbers are the same: the GCD is either number –if the numbers are different: the GCD of the smaller of the two and the difference between the two Example: GCD(20,8) = GCD(8,12) = GCD(8,4) = GCD(4,4) The GCD is 4
Formalized GCD Alg., and Code..
Determining Powers Efficiently
Determining Powers Computing powers the easy (but slow) way: X 5 = X*X*X*X*X X 20 = X*X*X*X*X*X*X*X*X*X.... The more efficient way:.
Formula for Determining Powers.
. Recursively Determining Power
Ackermann’s Function and Maze Routing
Ackermann’s Function.
Maze Routing Basic idea (see Ch8).
Towers of Hanoi
Move all disks to another rod, but: –Only one disk may be moved at a time. –No disk may be placed on a smaller disk. Initial:Goal:
Towers of Hanoi: Outer Problem =
Towers of Hanoi: 1 st Inner Problem =
Towers of Hanoi: Ex. base problem =
Towers of Hanoi Write a program that prints a solution –assume rods 1,2,3 –assume some number of discs given by height
. Towers of Hanoi
Towers Algorithm Legend: –Monks found 64 disk tower-game –Universe will end when they finish the game number of moves is 2 n -1 –for n=3: 7 moves –for n=20: 1,048,575 moves –for n=64: 1.8*10 19 moves == 585billion years at one move per second note: 14billion years since big bang The algorithm is “exponential” –roughly X n moves where n is size of problem –exponential algorithms are impractical!