迭代与递归

来源:互联网 发布: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)))

 

 

原创粉丝点击