【SICP练习】5 练习1.9

ぃ、小莉子 提交于 2021-02-06 07:59:42


以下是第一个加起两个正整数的方法,其中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柯于旺 原创文章,未经许可严禁转载!欢迎访问我的博客:http://blog.csdn.net/nomasp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!