Download presentation
Presentation is loading. Please wait.
Published byPauline Boone Modified over 6 years ago
1
2.3 Recursion do automated demo of towers of hanoi before class
M. C. Escher, 1948
2
Overview What is recursion? When one function calls itself directly or indirectly. Why learn recursion? Occurs in nature New way of thinking about programming Powerful programming paradigm. Many computations are naturally self-referential. Mergesort, FFT, gcd. A folder contains files and other folders. Closely related to mathematical induction. 1) Ask for examples of recursive functions in mathematics M. C. Escher, 1948
3
Greatest Common Divisor
Gcd. Find largest integer that evenly divides into p and q. Ex. gcd(4032, 1272) = 24. Applications. Simplify fractions: 1272/4032 = 53/168. RSA cryptosystem. 4032 = 26 32 = 23 31 531 gcd = 23 31 = 24 How would you implement gcd?
4
Greatest Common Divisor
Gcd. Find largest integer that evenly divides into p and q. Euclid's algorithm. [Euclid 300 BCE] base case reduction step, converges to base case gcd = one of world's oldest algorithms gcd(4032, 1272) = gcd(1272, 216) = gcd(216, 192) = gcd(192, 24) = gcd(24, 0) = 24. 4032 = 3
5
Greatest Common Divisor
Gcd. Find largest integer d that evenly divides into p and q. Java implementation. base case reduction step, converges to base case 1) What is your first impression of this code? public static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); } base case reduction step
6
How-To’s on Writing Recursive Functions
Base Case: You must check if we’ve reached the base case before doing another level of recursion! Make Progress Towards Base Case: Your recursive calls must be on a smaller or simpler input. Eventually this must reach the base case (and not miss it). Multiple recursive calls: Sometimes more than one recursive call. Sometimes not. Are their return values chosen, combined? Learn and follow these rules carefully! How would you implement gcd?
7
Recursive Graphics
8
Amazing hand-drawn image in NY Times by Serkan Ozkaya
[Serkan Ozkaya] simply wanted to draw and see printed a faithful copy of all the type and pictures planned for a broadsheet page of this newspaper: this very page you are reading right now, which shows his version of the page you are reading right now, which shows his version of his version of the page you are reading right now, which...
9
H-tree Used in integrated circuits to distribute the clock signal.
H-tree of order n. Draw an H. Recursively draw 4 H-trees of order n-1, one connected to each tip. and half the size tip Application: distribute clock signal to endpoints on integrated circuit. Want distance from clock to each endpoint to be the same. Otherwise clock skew. size order 1 order 2 order 3
11
Htree in Java Dr. Java Demo
public class Htree { public static void draw(int n, double sz, double x, double y) { if (n == 0) return; double x0 = x - sz/2, x1 = x + sz/2; double y0 = y - sz/2, y1 = y + sz/2; StdDraw.line(x0, y, x1, y); StdDraw.line(x0, y0, x0, y1); StdDraw.line(x1, y0, x1, y1); draw(n-1, sz/2, x0, y0); draw(n-1, sz/2, x0, y1); draw(n-1, sz/2, x1, y0); draw(n-1, sz/2, x1, y1); } public static void main(String[] args) { int n = Integer.parseInt(args[0]); draw(n, .5, .5, .5); draw the H, centered on (x, y) What is the computational cost of running this program? recursively draw 4 half-size Hs
12
Computational Cost of the H-Tree Program
H-tree of Order 1 First invocation of draw() calls itself 4 times H-tree of Order 2?
13
Towers of Hanoi
14
Towers of Hanoi Move all the discs from the leftmost peg to the rightmost one. Only one disc may be moved at a time. A disc can be placed either on empty peg or on top of a larger disc. Edouard Lucas invented Towers of Hanoi puzzle (1883) Lucas died as the result of a freak accident at a banquet when a plate was dropped and a piece flew up and cut his cheek. He died of erysipelas (rare skin infection) a few days later. start finish Towers of Hanoi demo Edouard Lucas (1883)
15
Towers of Hanoi: Recursive Solution
Move n-1 smallest discs right. Move largest disc left. cyclic wrap-around Consider the task of moving n discs from leftmost pole to rightmost pole. It is definitely the case that you need to transfer the biggest disc to the bottom of the rightmost pole, but you can't do that until all the remaining n-1 discs are removed from pole A. To get them out of the way, a good place to store them would be the middle pole. Once you have done this, you move the largest disc to pole C, and then transfer the rest of the discs from pole B to pole C. Move n-1 smallest discs right.
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.