(define double (lambda (x) (* 2 x))) (define halve (lambda (x) (/ x 2))) (define f-product (lambda (a b) (cond [(= a 0) 0] [(= a 1) b] [(even? a) (f-product (halve a) (double b))] [else (+ b (f-product (- a 1) b))]))) (define f-fproduct (lambda (a b) (define f-i (lambda (a b base) (cond [(= a 0) 0] [(= a 1) (+ b base)] [(even? a) (f-i (halve a) (double b) base)] [else (f-i (- a 1) b (+ base b))]))) (f-i a b 0)))