CS 61A Discussion 10 Tail Recursion Albert Xu Slides: - - PowerPoint PPT Presentation

cs 61a discussion 10
SMART_READER_LITE
LIVE PREVIEW

CS 61A Discussion 10 Tail Recursion Albert Xu Slides: - - PowerPoint PPT Presentation

CS 61A Discussion 10 Tail Recursion Albert Xu Slides: albertxu.xyz/teaching/cs61a/ The Cost of Recursion aint no free lunch (define (factorial n) (if (= n 0) 1 (* n (factorial (- n 1))))) scm> (factorial 3) The Cost of Recursion


slide-1
SLIDE 1

CS 61A Discussion 10

Tail Recursion

Slides: albertxu.xyz/teaching/cs61a/

Albert Xu

slide-2
SLIDE 2

The Cost of Recursion

ain’t no free lunch

(define (factorial n) (if (= n 0) 1 (* n (factorial (- n 1)))))

scm> (factorial 3)

slide-3
SLIDE 3

The Cost of Recursion

ain’t no free lunch

(define (factorial n) (if (= n 0) 1 (* n (factorial (- n 1)))))

scm> (factorial 3)

slide-4
SLIDE 4

The Cost of Recursion

ain’t no free lunch

(define (factorial n) (if (= n 0) 1 (* n (factorial (- n 1)))))

scm> (factorial 3)

slide-5
SLIDE 5

The Cost of Recursion

ain’t no free lunch

(define (factorial n) (if (= n 0) 1 (* n (factorial (- n 1)))))

scm> (factorial 3)

slide-6
SLIDE 6

The Cost of Recursion

ain’t no free lunch

(define (factorial n) (if (= n 0) 1 (* n (factorial (- n 1)))))

scm> (factorial 3)

slide-7
SLIDE 7

The Cost of Recursion

ain’t no free lunch

(define (factorial n) (if (= n 0) 1 (* n (factorial (- n 1)))))

scm> (factorial 3)

slide-8
SLIDE 8

The Cost of Recursion

ain’t no free lunch

(define (factorial n) (if (= n 0) 1 (* n (factorial (- n 1)))))

scm> (factorial 3)

slide-9
SLIDE 9

The Cost of Recursion

ain’t no free lunch

(define (factorial n) (if (= n 0) 1 (* n (factorial (- n 1)))))

scm> (factorial 3)

slide-10
SLIDE 10

The Cost of Recursion

ain’t no free lunch

(define (factorial n) (if (= n 0) 1 (* n (factorial (- n 1)))))

scm> (factorial 3)

slide-11
SLIDE 11

The Cost of Recursion

ain’t no free lunch

(define (factorial n) (if (= n 0) 1 (* n (factorial (- n 1)))))

scm> (factorial 3) scm> (factorial 10)

slide-12
SLIDE 12

The Cost of Recursion

ain’t no free lunch

(define (factorial n) (if (= n 0) 1 (* n (factorial (- n 1)))))

scm> (factorial 3) scm> (factorial 10)

slide-13
SLIDE 13

The Cost of Recursion

ain’t no free lunch

(define (factorial n) (if (= n 0) 1 (* n (factorial (- n 1)))))

scm> (factorial 3) scm> (factorial 10)

…11 frames!

slide-14
SLIDE 14

The Cost of Recursion

ain’t no free lunch

(define (factorial n) (if (= n 0) 1 (* n (factorial (- n 1)))))

scm> (factorial 3) scm> (factorial 10)

How much memory does factorial take? Use big-theta notation! …11 frames!

slide-15
SLIDE 15

The Cost of Recursion

ain’t no free lunch

(define (factorial n) (if (= n 0) 1 (* n (factorial (- n 1)))))

scm> (factorial 3) scm> (factorial 10)

How much memory does factorial take? Use big-theta notation! θ(n) …11 frames!

slide-16
SLIDE 16

Tail Call Optimization

ain’t no free lunch

(define (factorial n sofar) (if (= n 0) sofar (factorial (- n 1) (* sofar n)))))

slide-17
SLIDE 17

Tail Call Optimization

ain’t no free lunch

(define (factorial n sofar) (if (= n 0) sofar (factorial (- n 1) (* sofar n)))))

scm> (factorial 3 1)

slide-18
SLIDE 18

Tail Call Optimization

ain’t no free lunch

(define (factorial n sofar) (if (= n 0) sofar (factorial (- n 1) (* sofar n)))))

scm> (factorial 3 1)

slide-19
SLIDE 19

Tail Call Optimization

ain’t no free lunch

(define (factorial n sofar) (if (= n 0) sofar (factorial (- n 1) (* sofar n)))))

scm> (factorial 3 1)

slide-20
SLIDE 20

Tail Call Optimization

ain’t no free lunch

(define (factorial n sofar) (if (= n 0) sofar (factorial (- n 1) (* sofar n)))))

scm> (factorial 3 1)

slide-21
SLIDE 21

Tail Call Optimization

ain’t no free lunch

(define (factorial n sofar) (if (= n 0) sofar (factorial (- n 1) (* sofar n)))))

scm> (factorial 3 1)

slide-22
SLIDE 22

Tail Call Optimization

ain’t no free lunch

How much memory does factorial take now? Use big-theta notation! (define (factorial n sofar) (if (= n 0) sofar (factorial (- n 1) (* sofar n)))))

scm> (factorial 3 1)

θ(1)

slide-23
SLIDE 23

Is Tail Call Optimization Worth it?

Discuss: what are the benefits and what are the drawbacks of tail-call optimization?

slide-24
SLIDE 24

Is Tail Call Optimization Worth it?

Discuss: what are the benefits and what are the drawbacks of tail-call optimization?

More memory efficient! Constant, instead of linear space.

+

slide-25
SLIDE 25

Is Tail Call Optimization Worth it?

Discuss: what are the benefits and what are the drawbacks of tail-call optimization?

More memory efficient! Constant, instead of linear space.

+

  • Impossible to trace errors back.
slide-26
SLIDE 26

Is Tail Call Optimization Worth it?

Discuss: what are the benefits and what are the drawbacks of tail-call optimization?

More memory efficient! Constant, instead of linear space.

+

  • Impossible to trace errors back.

Because of this drawback, Python does not perform tail-call optimization.

slide-27
SLIDE 27

Tail Contexts

Tail contexts are locations in Scheme expressions where recursive calls would be the last operation performed in a frame! Why is this important?

Question: What makes a Scheme function tail recursive - in the context of tail calls? Check

  • ut this example if you’re not sure…

…recursive calls in tail contexts are called tail calls! (define (factorial n sofar) (if (= n 0) sofar (factorial (- n 1) (* sofar n)))))

slide-28
SLIDE 28

Identifying Tail Contexts

How can you tell what is a tail context?

slide-29
SLIDE 29

Identifying Tail Contexts

How can you tell what is a tail context? …some examples