This preview shows pages 1–3. Sign up to view the full content.
This preview has intentionally blurred sections. Sign up to view the full version.View Full Document
Unformatted text preview: Recursion and Iteration EECS 280 Programming and Introductory Data Structures Review General Recursion c A recursive problem is one that is defined in terms of itself. c A recursive problem has two important features: 1. There be one or more trivial base cases. 2. There be a way to solve bigger instances by first solving smaller instances, then performing a simple computation. c Recursive problems usually follow the structure of an inductive proof. c Once the problem has been recursively stated, it is fairly simple to write a recursive program to solve it c Unfortunately, these types of recursive programs require one stack frame for every recursive call; this can be substantial. Review Tail Recursion c To solve the general recursive stack problem, we considered tail recursive programs which require only constant space. c It doesn't matter how large the problem to be solved is, we only need a fixed number of stack frames to solve it. c For example, in our tail-recursive factorial solution, we only need the first fact_helper stack frame, no matter the size of N. c This is also true when solving the problems with iteration . c In fact, the two versions of factorial() we've seen are very, very similar that similarity is no accident! Recursion and Iteration Are they related? c What we will show today: 1. For any tail-recursive function, you can write an iterative equivalent. In other words, tail-recursion is just iteration. 2. This equivalence is not true for general recursive programs. c Note: There are some recursive programs that cannot be solved in constant space, including the tree traversal problem from Project 2. c We want to show that tail-recursion is no more powerful than iteration (i.e. for any computation that we could express tail-recursively, we could also express it iteratively). c We do this by giving a method for converting an arbitrary tail-recursive function to an iterative one. c This technique is called a proof by construction. (Tail-Recursion == Iteration) True while (<boolean-condition>) <body-statement> h On entry, the condition is evaluated. If the condition is false, the loop terminates. Otherwise, the body statement is evaluated, and the loop is re-entered. do <body-statement> while (<boolean-condition>); h On entry, the body statement is evaluated followed by the condition. If the condition is false, the loop terminates. Otherwise, it is re-entered at the body statement. Reviewing Loops for ( <init-statement>; <boolean-condition>; <post-body> ) <body-statement> h When a for-loop is entered for the first time, the init-statement is executed. Then, the condition is evaluated. If its false, the loop terminates. Otherwise, the body is evaluated, then the post-body is evaluated, and finally the loop is resumed at the point of evaluating the boolean condition....
View Full Document
This note was uploaded on 10/26/2010 for the course EECS 280 taught by Professor Noble during the Fall '08 term at University of Michigan.
- Fall '08