您的位置:首页 > 其它

SICP 习题 (1.30)解题总结

2014-03-16 00:59 176 查看
SICP 习题1.30看上去像是一条复习题,要求我们将一个线性递归过程改写成一个迭代过程。
需要改写的过程如下:
(define (sum term a next b)
  (if (> a b)
      0
      (+ (term a)
	 (sum term (next a) next b))))


不过仔细看看题目就会发现,这道题和一般的递归该迭代的习题不同,这道题把过程term 和next当参数进行传递,其灵魂还是高阶函数。
当我们逐渐习惯把一个过程当做普通的数据进行处理,就会发现这些东西其实没有那么难。
按以前的递归转迭代的思路,主要是寻找中间的不变量。
这里我们就定义参数result记录每次累加的结果,每次都先完成计算,将计算结果累加到result中后再进行“递归调用”。
定义的迭代过程如下:
(define (iter a result)
    (if (> a b)
	result
	(iter (next a) (+ (term a) result))))


然后通过(iter a 0)来启动计算,最终结果如下:
(define (sum-iter term a next b )
(define (iter a result) (if (> a b) result (iter (next a) (+ (term a) result))))
(iter a 0))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: