练习1.30
这道题要求将一个递归的规程改成是迭代的,通过对递归版本的sum的观察得出以下变换形式:
a—(next a)
other—(+ (term a) other)
博主英文不太好实在想不出什么好词语了。变换成迭代通俗点讲就是要将sum中最后一行的加号去掉,因为这个是消耗大量空间的根源。
如果我们将a和other作为迭代中的产生,将这个过程展开即有:
(sum-iter a other)
(sum-iter (next a) (+ (term a) other))
(sum-iter (next (next a)) (+ (term (term a))(+ (term a) other)))
博主就不再一直写下去了,就是按照前面的变换规则做对应变换罢了。
于是我们便可以完成题中的空缺部分了。
(define (sum term a next b)
(define (sum-iter a other)
(if (> a b)
other
(sum-iter (next a) (+ (term a) other))))
(sum-iter a 0))
时间: 2024-10-31 16:16:16