在 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
我将如何在 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