球拍-以指数为基础而不乘积

时间:2019-10-28 03:02:47

标签: racket

我试图完成一个问题,要求我编写一个函数,使其使用两个自然数base和expt,并为expt生成基数。但是,唯一允许的内置算术函数是函数add1和sub1。 如何使用递归和辅助函数来实现此目的?

示例:

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

1 个答案:

答案 0 :(得分:0)

添加重复“加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)))]))