迭代与递归
来源:互联网 发布:2016 网络新词 编辑:程序博客网 时间:2024/05/01 15:10
本来最近的目标是学习操作系统原理的,不知怎的?又转向了MIT的SICP.
哎! 意志不坚定!
但,不管怎么说学了总是好的!
才看了SICP的第一章1 2 小节.虽然英语很菜,但还是能大概理解字面上的意思.今天看了第2小节,通过google终于知道它所要描述的是递归和迭代,说来惭愧!
终于知道:迭代和递归是有大区别的!虽然他们都是以递归函数的形式出现,还有计算的结果一致,但在设计所体现的思想上却不大相同.递归在效率上也比迭代差很多.当程序出错时,如果produce采用迭代的方法,程序往往能很快地恢复过来,仅仅依靠函数的参数.
这是书上的一个习题:
(define (+ a b)
(if (= a 0)
b
(inc (+ (dec a) b))))
(define (+ a b)
(if (= a 0)
b
(+ (dec a) (inc b))))
(+ 4 5)
很显然,上面使用的是递归.下面使用的是迭代.
因为从递规函数的定义上可以看出
(define (factorial n)
(if (= n 1)
1
(* n (factorial (- n 1)))))
而迭代的定义:
(define (factorial n)
(fact-iter 1 1 n))
(define (fact-iter product counter max-count)
(if (> counter max-count)
product
(fact-iter (* counter product)
(+ counter 1)
max-count)))
- 迭代与递归
- 递归与迭代
- 递归与迭代
- 递归与迭代
- 递归与迭代
- 递归与迭代
- 递归与迭代
- 递归与迭代
- 递归与迭代
- 递归与迭代
- 递归与迭代
- 递归与迭代
- 递归与迭代
- 递归与迭代
- 递归与迭代
- 递归与迭代
- 递归与迭代
- 递归与迭代
- C#读取Win32标准DLL文件中的Bitmap(位图)
- 传智播客学习笔记5.15&5.16
- 传智播客学习笔记5.17
- 传智播客学习笔记5.19
- 传智播客学习笔记5.20
- 迭代与递归
- CSS 单位
- CSS单位
- 鼠标滚轮程序以及CSS的zoom属性范例
- 自定义checkbox大小(注:用CSS的ZOOM属性 )
- 虚拟机上网问题解决方法
- Java数据类型与JSON的数据交换
- 随笔20090704
- 全文搜索在MSSQL数据库的复制产生的问题