我在Scheme中编写了一个递归函数,它可以对某个输入重复n次执行给定的函数f。
(define (recursive-repeated f n)
(cond ((zero? n) identity)
((= n 1) f)
(else (compose f (recursive-repeated f (- n 1))))))
我需要构建这个函数的迭代版本,并使用尾递归。如果我正确理解了尾递归,那么我认为我已经做对了。
(define (iter-repeated f n)
(define (iter count total)
(if (= count 0)
total
(iter (- count 1) (compose f total))))
(iter n identity))
我的问题是,这是否实际上是迭代的?我认为我已经使用尾递归正确地构建了它,但它仍然技术上推迟了一堆操作,直到计数=0,其中它执行了多少个组合。
`(compose square (compose square (compose square (identity x))))`
它在返回total时进行评估,而不是在尾调用发生时进行评估。或者我是不是想得太多了? - Eddie V