zoukankan      html  css  js  c++  java
  • 【SICP练习】5 练习1.9

    

    以下是第一个加起两个正整数的方法,其中inc将参数加1dec将参数减1

    (define (+ a b)

             (if(= a 0)

                b

                (inc (+ (dec a) b))))

    用代换模型展示(+ 4 5)如下:

    (+ 4 5)

    (inc (+ 3 5))

    (inc (inc (+ 2 5)))

    (inc (inc (inc (+ 1 5))))

    (inc (inc (inc (inc (+ 0 5)))))

    (inc (inc (inc (inc 5))))

    (inc (inc (inc 6)))

    (inc (inc 7))

    (inc 8)

    9

    如上所示,在代换模型展示中包含了伸展和收缩两个阶段,并且伸展阶段所需的额外存储量和计算所需的步数都正比于参数a。因此这是一个线性递归过程。

    以下是另一个加起两个正整数的方法。

    (define (+ a b)

             (if(= a 0)

               b

               (+ (dec a) (inc b))))

    同样用代换模型展示(+ 4 5)如下:

    (+ 4 5)

    (+ 3 6)

    (+ 2 7)

    (+ 1 8)

    (+ 0 9)

    9

    在这个过程中并没有任何增长或者收缩,而其计算过程可用固定数目的状态变量(a)描述。这是一个线性迭代过程。

    版权声明:本文为 NoMasp柯于旺 原创文章,如需转载请联系本人。

  • 相关阅读:
    2016.11.21随笔
    2016.11.19随笔
    年月日
    导航position:absolute
    360搜索(边框)
    导航代码position:relative
    邮箱注册代码
    2016.11.18随笔
    2016.11.17随笔
    个人简历网页版代码
  • 原文地址:https://www.cnblogs.com/NoMasp/p/4786225.html
Copyright © 2011-2022 走看看