首页 > 其他 > 详细

SICP 习题 (1.30)解题总结

时间:2014-03-16 09:42:21      阅读:446      评论:0      收藏:0      [点我收藏+]

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))


SICP 习题 (1.30)解题总结,布布扣,bubuko.com

SICP 习题 (1.30)解题总结

原文:http://blog.csdn.net/keyboardota/article/details/19261089

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!