Recursion (Continued)

Slides:



Advertisements
Similar presentations
Recursion Chapter 14. Overview Base case and general case of recursion. A recursion is a method that calls itself. That simplifies the problem. The simpler.
Advertisements

Slides prepared by Rose Williams, Binghamton University Chapter 11 Recursion.
Slides prepared by Rose Williams, Binghamton University Chapter 11 Recursion.
1 CS100J 14 April 2005 Exceptions in Java. Read Chapter 10. This material will not be tested Review session Sunday in Olin 155, 1PM-3PM. I believe it is.
RECURSION Lecture 7 CS2110 – Spring Overview references to sections in text 2  Note: We’ve covered everything in JavaSummary.pptx!  What is recursion?
19-Aug-15 Simple Recursive Algorithms. 2 A short list of categories Algorithm types we will consider include: Simple recursive algorithms Backtracking.
Microbial Genetics I. Structure and function of genes II. Gene expression in bacteria III. Mutation and variation IV. Horizontal gene transfer in bacteria.
Recursion A method is recursive if it makes a call to itself. A method is recursive if it makes a call to itself. For example: For example: public void.
RECURSION Lecture 7 CS2110 – Fall Overview references to sections in text 2  Note: We’ve covered everything in JavaSummary.pptx!  What is recursion?
Slides prepared by Rose Williams, Binghamton University ICS201 Lecture 19 : Recursion King Fahd University of Petroleum & Minerals College of Computer.
1 CS 177 Week 16 Recitation Recursion. 2 Objective To understand and be able to program recursively by breaking down a problem into sub problems and joining.
1 CS1110 October 02. Recursion Recursion: If you get the point, stop; otherwise, see Recursion. Infinite recursion: See Infinite recursion. Read: pp
1 Recursion: If you get the point, stop; otherwise, see Recursion. Infinite recursion: See Infinite recursion. Read: pp but SKIP sect
Stacks and Queues. 2 3 Runtime Efficiency efficiency: measure of computing resources used by code. can be relative to speed (time), memory (space), etc.
Reading Warm up.
Data Structures & Algorithms
1 Introduction  Algorithms  Data structures  Abstract data types  Programming with lists and sets © 2008 David A Watt, University of Glasgow Algorithms.
RECURSION, CONTINUED Lecture 8 CS2110 – Fall 2015.
RECURSION Lecture 7 CS2110 – Fall Overview references to sections in text 2  Note: We’ve covered everything in JavaSummary.pptx!  What is recursion?
INDUCTION Lecture 21 CS2110 – Spring 2014 A well-known scientist (Bertrand Russell?) once gave a public lecture on astronomy. He described how the earth.
1 CS100J February 23 Recursion Recursion: If you get the point, stop; otherwise, see Recursion. Infinite recursion: See Infinite recursion. Read: pp
CS 115 OBJECT ORIENTED PROGRAMMING I LECTURE 11 GEORGE KOUTSOGIANNAKIS 1 Copyright: 2015 Illinois Institute of Technology_ George Koutsogiannakis.
1 Recursion and induction We teach these early, instead of new object- oriented ideas, so that those who are new to Java can have a chance to catch up.
RECURSION Lecture 8 CS2110 – Fall Overview references to sections in text 2  Note: We’ve covered everything in JavaSummary.pptx!  What is recursion?
CSC 143 P 1 CSC 143 Recursion [Chapter 5]. CSC 143 P 2 Recursion  A recursive definition is one which is defined in terms of itself  Example:  Compound.
Sorting and Runtime Complexity CS255. Sorting Different ways to sort: –Bubble –Exchange –Insertion –Merge –Quick –more…
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.
1 Dr. Chow-Sing LinRecursion - CH 10 Problem Solving and Program Design in C Chapter 9 Recursion Chow-Sing Lin.
RECURSION (CONTINUED) Lecture 9 CS2110 – Spring 2016.
Stacks and Queues. 2 Abstract Data Types (ADTs) abstract data type (ADT): A specification of a collection of data and the operations that can be performed.
CS314 – Section 5 Recitation 9
Recursion (Continued)
Recursion.
Recursion Version 1.0.
Lecture 24: Recursion Building Java Programs: A Back to Basics Approach by Stuart Reges and Marty Stepp Copyright (c) Pearson All rights reserved.
Grammars and Parsing.
Topic 6 Recursion.
Data Structures with Java © Rick Mercer
Chapter 15 Recursion.
Building Java Programs
Chapter 15 Recursion.
Recursion: If you get the point, stop; otherwise, see Recursion.
Primitive Data, Variables, Loops (Maybe)
Recursion (Continued)
Recursion (Continued)
Recursion Lecture 8 CS2110 – Spring 2018.
Recursion "To understand recursion, one must first understand recursion." -Stephen Hawking.
Building Java Programs
Stacks 12/7/2018 Presentation for use with the textbook Data Structures and Algorithms in Java, 6th edition, by M. T. Goodrich, R. Tamassia, and M. H.
CS100A Lecture 15, 17 22, 29 October 1998 Sorting
Recursion (Continued)
Recursion Lecture 8 CS2110 – Fall 2018.
Building Java Programs Chapter 2
Lecture Notes – Week 4 Chapter 5 (Loops).
Stacks and Queues Prof. Michael Tsai 2017/02/21.
Building Java Programs
OBJECT ORIENTED PROGRAMMING I LECTURE 11 GEORGE KOUTSOGIANNAKIS
Building Java Programs
It’s turtles all the way down
Building Java Programs
Recursion (Continued)
Building Java Programs
Chapter 18 Recursion.
Building Java Programs Chapter 2
CS100A Lecture 15, 17 22, 29 October 1998 Sorting
CS100A Lecture 25 1 December 1998 Chance to replace grade on Prelim 3, Question 2. Everyone is expected to be in lecture on Thursday, 3 December.
CS210- Lecture 3 Jun 6, 2005 Announcements
Download presented algorithms from the website
Grand Letter Segmentation #8 short /a/ words
Lecture 20 – Practice Exercises 4
Presentation transcript:

Recursion (Continued) Lecture 9 CS2110 – Fall2016

Overview references to sections in text What is recursion? 7.1-7.39 slide 1-7 Base case 7.1-7.10 slide 13 How Java stack frames work 7.8-7.10 slide 28-32

// invariant: p = product of c[0..k-1] what’s the product when k == 0? Gries slides on A2 function evaluate and evaluate itself are on pinned Piazza note Supplementary Material // invariant: p = product of c[0..k-1] what’s the product when k == 0? Why is the product of an empty bag of values 1? Suppose bag b contains 2, 2, 5 and p is its product: 20. Suppose we want to add 4 to the bag and keep p the product. We do: insert 4 in the bag; p= 4 * p; Suppose bag b is empty and p is its product: what value?. Suppose we want to add 4 to the bag and keep p the product. We want to do the same thing: insert 4 in the bag; p= 4 * p; For this to work, the product of the empty bag has to be 1, since 4 * 1 = 4

gcd: greatest common divisor of the elements of the bag 0 is the identity of + because 0 + x = x 1 is the identity of * because 1 * x = x false is the identity of || because false || b = b true is the identity of && because true && b = b 1 is the identity of gcd because gcd({1, x}) = x For any such operator o, that has an identity, o of the empty bag is the identity of o. Sum of the empty bag = 0 Product of the empty bag = 1 OR (||) of the empty bag = false. gcd of the empty bag = 1 gcd: greatest common divisor of the elements of the bag

Primitive vs Reference Types Primitive Types: char boolean int float double byte short long Reference Types: Object JFrame String PHD int[] Animal Animal[] ... (everything else!) A variable of the type contains: A value of that type A reference to an object of that type

a == b compares a and b’s values == vs equals Once you understand primitive vs reference types, there are only two things to know: a == b compares a and b’s values a.equals(b) compares the two objects using the equals method

== vs equals: Reference types For reference types, p1 == p2 determines whether p1 and p2 contain the same reference (i.e., point to the same object or are both null). p1.equals(p2) tells whether the objects contain the same information (as defined by whoever implemented equals). Pt a0 = new Pt(3,4); Pt a1 = new Pt(3,4); p1 a0 p2 a0 p3 a1 p4 null p2 == p1 p3 == p1 p4 == p1 true false p2.equals(p1) p3.equals(p1) p4.equals(p1) true NullPointerException!

Recap: Executing Recursive Methods 1. Push frame for call onto call stack. 2. Assign arg values to pars. 3. Execute method body. 4. Pop frame from stack and (for a function) push return value on the stack. For function call: When control given back to call, pop return value, use it as the value of the function call. p ____ k ____ 7 8 public int m(int p) { int k= p+1; return p; } m(5+2) call stack

Recap: Understanding Recursive Methods Have a precise specification Check that the method works in the base case(s). 3. Look at the recursive case(s). In your mind, replace each recursive call by what it does according to the spec and verify correctness. 4. (No infinite recursion) Make sure that the args of recursive calls are in some sense smaller than the pars of the method

Let’s write some recursive methods! Code will be available on the course webpage. len – length of a string without .length() dup – repeat each character in a string twice isPal – check whether a string is a palindrome rev – reverse a string

Check palindrome-hood A String palindrome is a String that reads the same backward and forward: A String with at least two characters is a palindrome if (0) its first and last characters are equal and (1) chars between first & last form a palindrome: e.g. AMANAPLANACANALPANAMA A recursive definition! isPal(“racecar”)  true isPal(“pumpkin”)  false have to be the same have to be a palindrome

A man a plan a caret a ban a myriad a sum a lac a liar a hoop a pint a catalpa a gas an oil a bird a yell a vat a caw a pax a wag a tax a nay a ram a cap a yam a gay a tsar a wall a car a luger a ward a bin a woman a vassal a wolf a tuna a nit a pall a fret a watt a bay a daub a tan a cab a datum a gall a hat a fag a zap a say a jaw a lay a wet a gallop a tug a trot a trap a tram a torr a caper a top a tonk a toll a ball a fair a sax a minim a tenor a bass a passer a capital a rut an amen a ted a cabal a tang a sun an ass a maw a sag a jam a dam a sub a salt an axon a sail an ad a wadi a radian a room a rood a rip a tad a pariah a revel a reel a reed a pool a plug a pin a peek a parabola a dog a pat a cud a nu a fan a pal a rum a nod an eta a lag an eel a batik a mug a mot a nap a maxim a mood a leek a grub a gob a gel a drab a citadel a total a cedar a tap a gag a rat a manor a bar a gal a cola a pap a yaw a tab a raj a gab a nag a pagan a bag a jar a bat a way a papa a local a gar a baron a mat a rag a gap a tar a decal a tot a led a tic a bard a leg a bog a burg a keel a doom a mix a map an atom a gum a kit a baleen a gala a ten a don a mural a pan a faun a ducat a pagoda a lob a rap a keep a nip a gulp a loop a deer a leer a lever a hair a pad a tapir a door a moor an aid a raid a wad an alias an ox an atlas a bus a madam a jag a saw a mass an anus a gnat a lab a cadet an em a natural a tip a caress a pass a baronet a minimax a sari a fall a ballot a knot a pot a rep a carrot a mart a part a tort a gut a poll a gateway a law a jay a sap a zag a fat a hall a gamut a dab a can a tabu a day a batt a waterfall a patina a nut a flow a lass a van a mow a nib a draw a regular a call a war a stay a gam a yap a cam a ray an ax a tag a wax a paw a cat a valley a drib a lion a saga a plat a catnip a pooh a rail a calamus a dairyman a bater a canal Panama

Problems with recursive structure Code will be available on the course webpage. exp - exponentiation, the slow way and the fast way perms – list all permutations of a string tile-a-kitchen – place L-shaped tiles on a kitchen floor drawSierpinski – drawing the Sierpinski Triangle

Computing bn for n >= 0 Power computation: b0 = 1 If n != 0, bn = b * bn-1 If n != 0 and even, bn = (b*b)n/2 Judicious use of the third property gives far better algorithm Example: 38 = (3*3) * (3*3) * (3*3) * (3*3) = (3*3) 4

Computing bn for n >= 0 Power computation: b0 = 1 If n != 0, bn = b bn-1 If n != 0 and even, bn = (b*b)n/2 Suppose n = 16 Next recursive call: 8 Next recursive call: 4 Next recursive call: 2 Next recursive call: 1 Then 0 /** = b**n. Precondition: n >= 0 */ static int power(double b, int n) { if (n == 0) return 1; if (n%2 == 0) return power(b*b, n/2); return b * power(b, n-1); } 16 = 2**4 Suppose n = 2**k Will make k + 2 calls

Computing bn for n >= 0 If n = 2**k k is called the logarithm (to base 2) of n: k = log n or k = log(n) Suppose n = 16 Next recursive call: 8 Next recursive call: 4 Next recursive call: 2 Next recursive call: 1 Then 0 /** = b**n. Precondition: n >= 0 */ static int power(double b, int n) { if (n == 0) return 1; if (n%2 == 0) return power(b*b, n/2); return b * power(b, n-1); } 16 = 2**4 Suppose n = 2**k Will make k + 2 calls

Difference between linear and log solutions? /** = b**n. Precondition: n >= 0 */ static int power(double b, int n) { if (n == 0) return 1; return b * power(b, n-1); } Number of recursive calls is n Number of recursive calls is ~ log n. /** = b**n. Precondition: n >= 0 */ static int power(double b, int n) { if (n == 0) return 1; if (n%2 == 0) return power(b*b, n/2); return b * power(b, n-1); } To show difference, we run linear version with bigger n until out of stack space. Then run log one on that n. See demo.

Table of log to the base 2 k n = 2^k log n (= k) 0 1 0 1 2 1 2 4 2 0 1 0 1 2 1 2 4 2 3 8 3 4 16 4 5 32 5 6 64 6 7 128 7 8 256 8 9 512 9 1024 10 2148 11 15 32768 15

Permutations of a String perms(abc): abc, acb, bac, bca, cab, cba abc acb bac bca cab cba Recursive definition: Each possible first letter, followed by all permutations of the remaining characters.

Tiling Elaine’s kitchen Kitchen in Gries’s house: 8 x 8. Fridge sits on one of 1x1 squares His wife, Elaine, wants kitchen tiled with el-shaped tiles –every square except where the refrigerator sits should be tiled. 8 /** tile a 23 by 23 kitchen with 1 square filled. */ public static void tile(int n) We abstract away keeping track of where the filled square is, etc.

Tiling Elaine’s kitchen /** tile a 2n by 2n kitchen with 1 square filled. */ public static void tile(int n) { } We generalize to a 2n by 2n kitchen if (n == 0) return; Base case?

Tiling Elaine’s kitchen /** tile a 2n by 2n kitchen with 1 square filled. */ public static void tile(int n) { } 2n if (n == 0) return; n > 0. What can we do to get kitchens of size 2n-1 by 2n-1

Tiling Elaine’s kitchen /** tile a 2n by 2n kitchen with 1 square filled. */ public static void tile(int n) { } if (n == 0) return; We can tile the upper-right 2n-1 by 2n-1 kitchen recursively. But we can’t tile the other three because they don’t have a filled square. What can we do? Remember, the idea is to tile the kitchen!

Tiling Elaine’s kitchen /** tile a 2n by 2n kitchen with 1 square filled. */ public static void tile(int n) { } if (n == 0) return; Place one tile so that each kitchen has one square filled; Tile upper left kitchen recursively; Tile upper right kitchen recursively; Tile lower left kitchen recursively; Tile lower right kitchen recursively;

Sierpinski triangles S triangle of depth 0 S triangle of depth 1: 3 S triangles of depth 0 drawn at the 3 vertices of the triangle S triangle of depth 2: 3 S triangles of depth 1 drawn at the 3 vertices of the triangle

Sierpinski triangles S triangle of depth 0: the triangle S triangle of depth d at points p1, p2, p3: 3 S triangles of depth d-1 drawn at at p1, p2, p3 p3 Sierpinski triangles of depth d-1 p2 p1

Sierpinski triangles x y s 3 /2 s/2 s s/4

Conclusion Recursion is a convenient and powerful way to define functions Problems that seem insurmountable can often be solved in a “divide-and-conquer” fashion: Reduce a big problem to smaller problems of the same kind, solve the smaller problems Recombine the solutions to smaller problems to form solution for big problem http://codingbat.com/java/Recursion-1