我正在编写一个递归函数。但是问题要求您不要使用指数函数。谁能告诉我如何通过将较小的幂乘以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))))))
答案 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))))))