在 Dr. Racket 中,如何编写 Tetration 函数

In Dr. Racket, how to write a Tetration function

我将如何在 Dr. Racket 中编写 Tetration 函数。 到目前为止,这是我的代码:

(define (awesome-tetration k p)
  (cond
    [(= p 1) (expt k p)]
    [else (expt (awesome-tetration k (sub1 p)) (expt k p))]))

如果我输入

(awesome-tetration 2 3)

我想要的输出是 2^2^2= 16 但是,我得到的是:

4294967296

为什么会这样。我能得到一些关于我的代码有什么问题的指示吗?谢谢

递归步骤正确,您调用 expt 的次数超出了需要。解决方法比较简单,只需要这样:

(define (awesome-tetration k p)
  (cond
    [(= p 1) (expt k p)]
    [else (expt k (awesome-tetration k (sub1 p)))]))

现在可以使用了:

(awesome-tetration 2 3)
=> 16