Ракетка - производим базу по показателю без умножения - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь завершить вопрос, который просит меня написать функцию так, чтобы она потребляла два натуральных числа base и expt и производила base для expt. Однако разрешены только встроенные арифметические функции - функции add1 и sub1. Как я могу добиться этого с помощью рекурсии и вспомогательных функций?

Пример:

(check-expect (exponent-without-mult 3 3) 27)

1 Ответ

0 голосов
/ 29 октября 2019

Сложение повторяется «добавить 1»:

(define (nat+ nat1 nat2)
  (cond
    [(zero? nat1) nat2]
    [(positive? nat1) (add1 (nat+ (sub1 nat1) nat2))]))

Умножение повторяется сложение:

(define (nat* nat1 nat2)
  (cond
    [(zero? nat1) 0]
    [(positive? nat1) (nat+ (nat* (sub1 nat1) nat2) nat2)]))

Вычисление повторяется умножение:

(define (nat^ nat1 nat2)
  (cond
    [(zero? nat2) 1]
    [(positive? nat1) (nat* nat1 (nat^ nat1 (sub1 nat2)))]))
...