(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,它就永远不会结束。我只是在我的脑海中似乎无法理解它。