210 likes | 328 Views
CS320n –Visual Programming. Advanced Recursion (Slides 8-2). Thanks to Wanda Dann, Steve Cooper, and Susan Rodger for slide ideas. What We Will Do Today. Look at using recursion to solve other forms of problems. A second form of recursion.
E N D
CS320n –Visual Programming Advanced Recursion (Slides 8-2) Thanks to Wanda Dann, Steve Cooper, and Susan Rodger for slide ideas.
What We Will Do Today • Look at using recursion to solve other forms of problems Advanced Recursion
A second form of recursion • A second form of recursion is used when the solution to a problem depends on the ability to break a problem down into smaller and smaller sub-problems. • Example • Files are stored on computers in directories. • Directories can store files and other directories (sub directories) • How do you find all the files in a directory? Advanced Recursion
Directory Structure Directories Files How deep can this go? Advanced Recursion
Finding all the Files • Break the big problem up into smaller problems • Find the “immediate” files in this directory • then go to each sub directory and find the files in it • To solve the big problem (find all the files in a directory) we solve smaller problems (find all the files in the sub directories) • The smaller problems are solved the same way as the big problem! Advanced Recursion
Another Example • Towers of Hanoi • A classic puzzle Advanced Recursion
A Towers Problem • The challenge is to move all the disks from the source cone to the target cone. • RULES: • Move 1 disk at a time • A larger disk may never be on top of a smaller disk Source Spare Target (coneFrom) (coneSpare) (coneTo) Advanced Recursion
Initial world • The disks are instances of the Torus class. (A torus is a doughnut shaped object.) • Each cone is positioned exactly 1 meter from its nearest neighbor. • Each disk is positioned exactly 0.1 meter above the disk below it. Advanced Recursion
Identifying the disks • To make it easier to describe our solution, we give each disk an id number and a name. id number name 1 disk1 2 disk2 3 disk3 4 disk4 Advanced Recursion
Solving the problem • Our solution will use the • Principle of “wishful thinking” • assume we could solve a smaller version of the same problem • if we could solve the smaller version, it would make it easier to solve this problem. • Base case – the simplest possible version of this problem, one that can obviously be solved. Advanced Recursion
Wishful thinking in practice Assume I could move 3 of the disks to the spare cone. Then I could move the 4th disk (base case) to the target cone. Advanced Recursion
Storyboard • To solve the towers problem, we need to know howmany disks we have and which cone is the source, the target, and the spare: World.towers: Parameters: howmany, source, target, spare If howmany is equal to 1 move it (the smallest disk) from the source to the target Else (1) call towers to move howmany-1 disks from source to spare (using target as spare) (2) move it (disk # howmany) from the source to the target (3) call towers to move howmany-1 disks from the spare to the target (using the source as the spare) base case – move 1 disk a smaller problem -- recursively move the rest of the disks Advanced Recursion
towers • The base case occurs when howmany equals 1, just move the disk. • Two recursive calls are used to solve the smaller problem (moving howmany-1 disks), which helps us solve the bigger problem (moving howmany disks). Advanced Recursion
Moving a disk • A challenge in this animation is how to move a disk from one tower to another. • In the towers method, we assumed that we had a method named moveIt that would accomplish the task. To write the moveIt method, we need to know: • What are the parameters to send in to our method? • What steps need to occur? • How high to raise the disk object? • How far (forward/back) to move it? Advanced Recursion
moveIt Storyboard • The parameters are: • whichdisk – the disk id number • fromcone – the source cone • tocone – the target cone • A storyboard describing the steps is: moveIt: Parameters: whichdisk, fromcone, tocone Do in order Lift the disk up above the top of the fromcone Move it (forward or back) to a location above the tocone Lower the disk down onto the tocone Advanced Recursion
Nested Ifs • The disk id number is used to determine which disk to • move up • move over • move down • This means that nested Ifs must be used three times! (The code on this slide is for just one move.) Advanced Recursion
Using an expression • We noticed that the distance each disk has to move up (and then back down) is 0.3 meters more than 0.1 * the id number (whichdisk). • We could use an expression to compute the distance for the move up and move down instructions. move the appropriate disk 0.3 + 0.1 *whichdisk Advanced Recursion
Problem • The problem with this nifty math expression is that we need to have the disk's name to write a move instruction. • For example, disk1 move up … must be an object,cannot use the id number here Advanced Recursion
Using a Function • We decided to write a function to convert the disk id number (i) to the disk name. Advanced Recursion
moveIt Advanced Recursion
Demo! Advanced Recursion