(define (even x) (= (modulo x 2) 0))
(define (twice x) (* x 2))
(define (half x) (/ x 2))
(define (rfmult a b)
(cond ((= 0 a) 0)
((= 0 b) 0)
((even a) (twice (rfmult (half a) b)))
(else (+ b (twice (rfmult (half (- a 1)) b))))))
私はそれ(rfmult 3 4)
が呼び出され、else
ステートメントがトリガーされ、その後(- 3 1)
が行わa
れ、半分にカットされるので、それが になるという理解に至りました(rfmult 1 4)
。この時点で、2 を掛けると終わらないので迷います。頭の中でしか理解できないようです。