This preview shows page 1. Sign up to view the full content.
Unformatted text preview: • Tree recursion Compare the car/cdr version of deep-map with ordinary map : (define (map fn seq) (if (null? seq) ’() (cons (fn (car seq)) (map fn (cdr seq))))) Each non-base-case invocation of map gives rise to one recursive call, to handle the cdr of the sequence. The car, an element of the list, is not handled recursively. By contrast, in deep-map there are two recursive calls, one for the car and one for the cdr. This is what makes the difference between a sequential, one-dimensional process and the two-dimensional process used for deep lists and for the Tree abstraction. A procedure in which each invocation makes more than one recursive call is given the name tree recursion because of the relationship between this pattern and tree structures. It’s tree recursion only if each call (other than a base case) gives rise to two or more recursive calls; it’s not good enough to have two recursive calls of which only one is chosen each time, as in the following non-tree-recursive procedure:...
View Full Document
This note was uploaded on 02/17/2010 for the course COMPUTER S 26275 taught by Professor Harvey,b during the Spring '10 term at Berkeley.
- Spring '10