代码之家  ›  专栏  ›  技术社区  ›  Dante

如何使用Racket编写一个将数字提升到10次方的函数?

  •  1
  • Dante  · 技术社区  · 10 年前

    这就是我所拥有的:

    (define (10th-power 10 y)
     (if (= y 0)
     1
     (* 10 ((10th-power 10 (- y 1)))))
    

    例如,如果我输入2,它应该输出1024。

    3 回复  |  直到 10 年前
        1
  •  3
  •   Sylwester    10 年前

    这个简短的程序有很多错误。以下是球拍报告的错误:

    • read: expected a ')' to close '(' 因为你错过了父母的结局
    • define: not an identifier... in 10 因为10不能是变量名,所以不能在参数列表中。
    • application: not a procedure 。递归部分中的双括号使结果来自 10th-power 作为过程尝试,而不是按原样使用值。

    如果你修复了这些问题,你的程序会起作用,但它会 10^y 而不是 y^10 。也许你需要一个助手来记录你的乘法次数 y 倒计时而不是 y 这是一个应该在10的位置。

        2
  •  1
  •   soegaard    10 年前

    你很接近:

    #lang racket
    
    (define (10th-power y)
      (if (= y 0)
          1
          (* 10 (10th-power (- y 1)))))
    
    (10th-power 3)
    

    需要注意的是:不能在表达式周围插入额外的括号。例子: (100) 这意味着调用100时没有参数-因为100不是函数,所以会出现错误“application:not a procedure:”。

    第二件要注意的事:你不需要10作为一个论点。

        3
  •  0
  •   龚成玥    10 年前

    你可以这样写一个递归:

    #lang racket
    (define (10th-power y)
      (if (= y 0 )
          1
          (* 10 (10th-power (- y 1)))))
    

    顺便说一下,如果你想把空间效率从o(n)提高到o(1),你可以写迭代:

    #lang racket
    (define (10th-power y)
      (define (iter back times)
        (if (= times 0)
            back
            (iter (* 10 back) (- times 1))))
      (iter 1 y))
    
    (10th-power 3)
    
    推荐文章