SICP 2.38 研究递归和迭代模型
2017-01-17 01:25
260 查看
之前讨论的过程accumulate也称作fold_right(右折叠),因为它将序列的第一个元素组合到右边所有元素的结果上。相对的,也有个fold_left(左折叠),将左边的结果加到右边的元素上。
fold_right的scheme代码:
这是一个迭代的过程。
那么,下面的表达式的值是什么?
(fold_right / 1 (list 1 2 3))
(fold_left / 1(list 1 2 3))
(fold_right list nil (list 1 2 3))
(fold_left list nil (list 1 2 3))
fold_right是个线性递归过程,即最后一步便是回归操作的第一步,则第一个表达式的值是 1/(2/3)
fold_left 是个迭代(尾递归)过程,则第二个表达式的值是 (1/2)/3
同理:
第三个表达式的值是 ((1 2 3))
第四个表达式的值是 (((() 1) 2) 3)
fold_right的scheme代码:
> (define (fold_left op initial sequence) (define (iter result rest) (if (null? rest) result (iter (op result (car rest)) (cdr rest))))
这是一个迭代的过程。
那么,下面的表达式的值是什么?
(fold_right / 1 (list 1 2 3))
(fold_left / 1(list 1 2 3))
(fold_right list nil (list 1 2 3))
(fold_left list nil (list 1 2 3))
fold_right是个线性递归过程,即最后一步便是回归操作的第一步,则第一个表达式的值是 1/(2/3)
fold_left 是个迭代(尾递归)过程,则第二个表达式的值是 (1/2)/3
同理:
第三个表达式的值是 ((1 2 3))
第四个表达式的值是 (((() 1) 2) 3)
相关文章推荐
- SICP 关于递归迭代的重新理解以及尾递归的引入...
- 链表反转——迭代模型与递归模型
- 【数据结构与算法学习笔记】PART1:算法分析(计算,计算模型,大O记号,算法分析,迭代与递归,动态控制)
- SICP 2.27 deep_reverse (迭代+递归)
- SICP_Python版第三章:递归与迭代
- SICP 习题 (1.9) 解题总结:迭代计算过程和递归计算过程
- 分别使用递归和迭代实现快速排序
- 迭代和递归的区别
- 递归与迭代
- 【SICP归纳】1 过程和代换模型
- 迭代与递归的区别
- [Algorithms, C] long2char: 自己用C写来玩玩的整形转化为字符串函数 (递归和迭代两种实现): void long2char(long from, char *to, int n);
- (收藏)基于XML的有限元软件二次开发模型研究
- 《火球——UML大战需求分析》(第3章 分析业务模型-类图)——3.5 类的“递归”关系与“三角”关系
- 斐波那契数列的递归,迭代(循环),通项公式三种实现
- 迭代和递归的关系
- [转载]领域模型设计讨论与研究
- 94 Binary Tree Inorder Traversal 【递归和迭代的对比较分析】
- 校园数字化建设--注册中心投标文件研究(7)--公共数据库及数据模型设计
- LeetCode 206 Reverse Linked List(反转链表)(四步将递归改写成迭代)(*)