有人可以帮助我在球拍中使用递归功能吗?

时间:2019-03-27 00:46:16

标签: racket

我正在编写一个递归函数。但是问题要求您不要使用指数函数。谁能告诉我如何通过将较小的幂乘以a来获得较大的幂?

输入a=2 n=4。然后得到[2, 4, 8, 16] 输入a=3 n=4。然后获取[3 9 27 81]。 我试图每次将a乘以a,所以当我输入2和4时,得到[2 4 16 256]。那我该怎么办?

这是我写的:

(define (input a n)
    (if (= n 0)
        '()
        (append (cdr (list [* a a] a))
        (let ((a (* a a)))
        (input a (- n 1))))))

1 个答案:

答案 0 :(得分:0)

您正在错误地解决问题,您确实需要两个递归函数(一个用于构建列表,一个用于构建每个元素)。我假设您被允许使用本地,但是如果您不使用本地,则可以将其移入辅助函数。

(define (build-sqr-list a n)
    (local [(define (sqr-recurse a n)
          (if (= n 0)
              1
              (* a (sqr-recurse a (sub1 n)))))]
    (if (= n 0)
        '()
        (cons (sqr-recurse a n) (build-sqr-list a (sub1 n))))))