【SICP练习】5 练习1.9
2015-09-08 00:00
183 查看
以下是第一个加起两个正整数的方法,其中inc将参数加1,dec将参数减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
以下是第一个加起两个正整数的方法,其中inc将参数加1,dec将参数减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
相关文章推荐
- Ruby中使用Block、Proc、lambda实现闭包
- Ruby中的block、proc、lambda区别总结
- C#中的递归APS和CPS模式详解
- WinForm实现按名称递归查找控件的方法
- C#中的尾递归与Continuation详解
- C++实现的一个可以写递归lambda的Y函数
- C#特性之匿名方法和Lambda表达式
- C#递归实现显示文件夹及所有文件并计算其大小的方法
- php递归创建目录的方法
- 理解C#中的Lambda表达式
- 初步认识C#中的Lambda表达式和匿名方法
- C#3.0中Lambda表达式详解
- C#基础之Lambda表达式用法实例教程
- 浅谈javascript 迭代方法
- Javascript递归打印Document层次关系实例分析
- oracle 使用递归的性能提示测试对比
- 使用curl递归下载软件脚本分享
- Perl脚本实现递归遍历目录下的文件
- JavaScript的递归之递归与循环示例介绍
- C# 递归查找树状目录实现方法