This preview shows page 1. Sign up to view the full content.
Unformatted text preview: • Tree recursion Compare the car/cdr version of deepmap with ordinary map : (define (map fn seq) (if (null? seq) ’() (cons (fn (car seq)) (map fn (cdr seq))))) Each nonbasecase 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 deepmap there are two recursive calls, one for the car and one for the cdr. This is what makes the difference between a sequential, onedimensional process and the twodimensional 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 nontreerecursive 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
 Harvey,B
 Recursion

Click to edit the document details