简体   繁体   English

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

[英]In Dr. Racket, how to write a Tetration function

How would I write a Tetration function in Dr. Racket.我将如何在 Dr. Racket 中编写 Tetration 函数。 This is my code so far:到目前为止,这是我的代码:

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

If I input如果我输入

(awesome-tetration 2 3)

My desired output is 2^2^2= 16 However, instead I get:我想要的输出是 2^2^2= 16 但是,我得到:

4294967296

Why is this happening.为什么会发生这种情况。 Can I get some pointers on what's wrong with my code.我能得到一些关于我的代码有什么问题的指示吗? Thanks.谢谢。

The recursive step is in correct, you're calling expt more times than needed.递归步骤是正确的,您调用expt次数比需要的多。 The solution is simpler, you just need to to this:解决方案更简单,您只需要这样做:

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

Now it works:现在它的工作原理:

(awesome-tetration 2 3)
=> 16

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM