Умножение без + или *

Я работаю над How to Design Programs самостоятельно. Я не совсем разобрался со сложной линейной рекурсией, поэтому мне нужна помощь.

Задача: Определите multiply, который потребляет два натуральных числа, n и x, и производит n * x без использования * Scheme. Исключите + из этого определения.

Проще со знаком +:

(define (multiply n m)
  (cond
    [(zero? m) 0]
    [else (+ n (multiply n (sub1 m)))]))

(= (multiply 3 3) 9)

Я знаю, что нужно использовать add1, но я не могу сделать рекурсию правильно.

Спасибо.

5
задан Óscar López 1 September 2012 в 22:20
поделиться