2.7: Recursion What Is Recursion? When One Function Calls Itself Directly Or Indirectly

2.7: Recursion What Is Recursion? When One Function Calls Itself Directly Or Indirectly

Overview 2.7: Recursion What is recursion? When one function calls itself directly or indirectly. Why learn recursion? ! New mode of thinking. ! Powerful programming tool. ! Divide-and-conquer paradigm. Start Many computations are naturally self-referential. ! Quicksort, FFT, gcd. ! Linked data structures. ! A directory contains files and other directories. Closely related to mathematical induction. Drawing Hands Finish M. C. Escher, 1948 Introduction to Computer Science • Robert Sedgewick and Kevin Wayne • Copyright © 2005 • http://www.cs.Princeton.EDU/IntroCS 2 Greatest Common Divisor Greatest Common Divisor Find largest integer d that evenly divides into p and q. Find largest integer d that evenly divides into p and q. " p if q = 0 base case " p if q = 0 base case gcd(p, q) = # gcd(p, q) = # $ gcd(q, p % q) otherwise reduction step, $ gcd(q, p % q) otherwise reduction step, converges to base case converges to base case ! gcd(4032, 1272) = gcd(1272, 216) ! 6 2 1 p = gcd(216, 192) 4032 = 2 ! 3 ! 7 3 1 1 = gcd(192, 24) 1272 = 2 ! 3 ! 53 gcd = 23 ! 31 = 24 = gcd(24, 0) q q p % q = 24. x x x x x x x x Applications. ! Simplify fractions: 1272/4032 = 53/168. gcd ! RSA cryptosystem (stay tuned). p = 8x ! History of algorithms. q = 3x Euclid, 300 BCE gcd(p, q) = x 3 4 Greatest Common Divisor Koch Snowflake Find largest integer d that evenly divides into p and q. Koch curve of order n. ! Draw curve of order n-1. " p if q = 0 base case ! Turn 60º. n = 0 n = 1 gcd(p, q) = # ! Draw curve of order n-1. $ gcd(q, p % q) otherwise reduction step, converges to base case ! Turn -120º. ! Draw curve of order n-1. ! Turn 60º. ! n = 2 n = 3 ! Draw curve of order n-1. Java implementation. public static void koch(int n, double size) { public static int gcd(int p, int q) { if (n == 0) StdDraw.forward(size); if (q == 0) return p; base case else { else return gcd(q, p % q); reduction step koch(n-1, size); } StdDraw.rotate(60); koch(n-1, size); StdDraw.rotate(-120); koch(n-1, size); StdDraw.rotate(60); koch(n-1, size); } } 5 6 Koch Curve: Recursion Tree Koch Snowflake n 2 Koch snowflake of order n. ! Draw Koch curve of order n. ! Turn -120º. ! Draw Koch curve of order n. L R L ! Turn -120º. 1 1 1 1 ! Draw Koch curve of order n. L R L L R L L R L L R L 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 L R L L L R L R L R L L L R L L: Rotate 60º R: Rotate -120º 7 10 Koch Snowflake in Java Towers of Hanoi Move all the discs from the leftmost peg to the rightmost one. public class Koch { public static #vmoid koch(int n,if don u=b0le size) { } just did this ! Only one disc may be moved at a time. gcd(m, n) = " ! gcd(n, m % n) otherwise ! A disc can be placed either on empty peg or on top of a larger disc. public static void main(String args[]) { compute int N = Integer.parseInt(args[0]); parameters int width = 512; int height = (int) (2 * width / Math.sqrt(3)); double size = width / Math.pow(3.0, N); StdDraw.create(width, height); draw it StdDraw.moveTo(0, width * Math.sqrt(3) / 2); koch(N, size); StdDraw.rotate(-120); Start Finish koch(N, size); StdDraw.rotate(-120); koch(N, size); StdDraw.show(); } } Towers of Hanoi demo Edouard Lucas (1883) 11 12 Towers of Hanoi: Recursive Solution Towers of Hanoi Legend A B C Is world going to end (according to legend)? ! 40 golden discs on 3 diamond pegs. ! World ends when certain group of monks accomplish task. Q. Will computer algorithms help? Move N-1 smallest discs to pole B. Move largest disc to pole C. Move N-1 smallest discs to pole C. 14 15 Towers of Hanoi: Recursive Solution Towers of Hanoi: Recursive Solution % java Hanoi 3 % java Hanoi 4 public class Hanoi { Move disc 1 from A to C Move disc 1 from A to B Move disc 2 from A to B Move disc 2 from A to C public static void hanoi(int n, String from, String temp, Move disc 1 from C to B Move disc 1 from B to C String to) { Move disc 3 from A to C Move disc 3 from A to B if (n == 0) return; Move disc 1 from B to A Move disc 1 from C to A hanoi(n-1, from, to, temp); Move disc 2 from B to C Move disc 2 from C to B System.out.println("Move disc " + n + Move disc 1 from A to C Move disc 1 from A to B " from " + from + " to " + to); Move disc 4 from A to C hanoi(n-1, temp, from, to); Move disc 1 from B to C } Move disc 2 from B to A Move disc 1 from C to A public static void main(String[] args) { Move disc 3 from B to C int N = Integer.parseInt(args[0]); Move disc 1 from A to B hanoi(N, "A", "B", "C"); Move disc 2 from A to C } Move disc 1 from B to C } subdivisions of ruler 16 17 Towers of Hanoi: Recursion Tree Properties of Towers of Hanoi Solution n 3, ABC from, temp, to Remarkable properties of recursive solution. N ! Takes 2 - 1 steps to solve N disc problem. ! Sequence of discs is same as subdivisions of ruler. move 3 from A to C ! Smallest disc always moves in same direction. 2, ACB 2, BAC Recursive algorithm yields non-recursive solution! move 2 from A to B move 2 from ! Alternate between two moves: B to C – move smallest disc to right (left) if N is even (odd) 1, ABC 1, CAB 1, BCA 1, ABC – make only legal move not involving smallest disc move 1 from move 1 from move 1 from move 1 from Recursive algorithm may reveal fate of world. A to C C to B B to A A to C ! Takes 348 centuries for N = 40, assuming rate of 1 disc per second. ! Reassuring fact: any solution takes at least this long! 0, ACB 0, BAC 0, ACB 0, ACB 0, BAC 0, CBA 0, ACB 0, BAC 1 2 1 3 1 2 1 18 19 Divide-and-Conquer Fractional Brownian Motion Divide-and-conquer paradigm. Physical process which models many natural and artificial phenomenon. ! Break up problem into smaller subproblems of same structure. ! Dispersion of ink flowing in water. ! Solve subproblems recursively using same method. ! Price of stocks. ! Combine results to produce solution to original problem. ! Rugged shapes of mountains and clouds. ! Fractal landscapes and textures for computer graphics. Divide et impera. Veni, vidi, vici. - Julius Caesar Many important problems succumb to divide-and-conquer. ! Quicksort for sorting. ! FFT for signal processing. ! Multigrid methods for solving PDEs. ! Adaptive quadrature for integration. ! Hilbert curve for domain decomposition. ! Integer arithmetic for RSA cryptography. ! Quad-tree for efficient N-body simulation. ! Midpoint displacement method for Brownian motion. 20 21 Simulating Brownian Motion Simulating Brownian Motion in Java Midpoint displacement method. Midpoint displacement method. ! Maintain an interval with endpoints (x0, y0) and (x1, y1). ! Maintain an interval with endpoints (x0, y0) and (x1, y1). ! Divide the interval in half. ! Divide the interval in half. ! Choose ! at random from Gaussian distribution. ! Choose ! at random from Gaussian distribution. ! Set xmid = (x0 + x1)/2 and ymid = (y0 + y1)/2 + !. ! Set xmid = (x0 + x1)/2 and ymid = (y0 + y1)/2 + !. ! Recur on the left and right intervals. ! Recur on the left and right intervals. public static void midpoint(double x0, double y0, double x1, double y1, double var) { if (x1 - x0 < 1.0) return; double displacement = MyMath.gaussian(0, Math.sqrt(var)); double xmid = 0.5 * (x0 + x1); " double ymid = 0.5 * (y0 + y1) + displacement; midpoint(x0, y0, xmid, ymid, var/2); StdDraw.lineTo(xmid, ymid); midpoint(xmid, ymid, x1, y1, var/2); x0 xmid x1 } variance halves at each level; change factor to get different shapes 22 23 Plasma Cloud Plasma Cloud (Grayscale) Plasma cloud centered at (x, y) of size s. ! Each corner labeled with some grayscale value. ! Divide square into four quadrants. ! The grayscale of each new corner is the average of others. – center: average of the four corners + random displacement – others: average of two original corners ! Recur on the four quadrants. c1 +c2 c1 2 c2 ! c1 +c3 c2 +c4 2 2 (c +c +c +c ) 1 2 3 4 + " 4 ! ! c3 c3 +c4 c4 2 ! 24 25 ! Plasma Cloud (Color) Summary How to write simple recursive programs? ! Base case, reduction step. ! Trace the execution of a recursive program. ! Use pictures. Why learn recursion? Towers of Hanoi by W. A. Schloss. ! New mode of thinking. ! Powerful programming tool. Many important problems have elegant divide-and-conquer solutions. 26 28.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    6 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us