SICP_Python版第2章:递归的定义序列
2016-07-16 15:32
399 查看
我们可以通过递归的方式来定义序列,由于是通过tuple来定义的,所以比起正常的序列,感觉很别扭。
练习2.17定义一系列有关序列的结构
empty_rlist = None def make_rlist(first, rest): return (first, rest) def first(s): return s[0] def rest(s): return s[1] def len_rlist(s): length = 0 while s != empty_rlist: s, length = rest(s), length + 1 return length def getitem_rlist(s, i): while i > 0: s, i = rest(s), i - 1 return first(s) def last_item(s): #return the last element return getitem_rlist(s,len_rlist(s)-1) def last_pair(s): while rest(s)!=empty_rlist: s = rest(s) return s counts = make_rlist(1, make_rlist(2, make_rlist(3, make_rlist(4, empty_rlist))))
补充练习:定义两个序列的append操作
递归的一层一层的解开,然后又组合在一起
def append(s1,s2): if s1==empty_rlist: return s2 return make_rlist(first(s1),append(rest(s1),s2))
练习2−19:定义过程reverse
def reverse(s): r=empty_rlist while s!=empty_rlist: s,r = rest(s),make_rlist(first(s),r) return r
练习20利用可变参数创建序列,其中只选取与第一个元素奇偶一致的整数。
def same_partity(first,*remains): def do_same_partity(first_item,*rest_items): if rest_items==():return empty_rlist if (first_item^first)&1 != 1: return make_rlist(first_item,do_same_partity(*rest_items)) return do_same_partity(*rest_items) return do_same_partity(first,*remains)
相关文章推荐
- Django使用Python操作数据库 --Django 1.8.2 文档(中文)部分笔记
- Learning Python 005 字符串和编码
- Learning Python 005 字符串和编码
- Python学习笔记
- 安装scrapy各种问题
- SyntaxError: Non-ASCII character '\xb2' in file
- python_类方法
- 使用Python结合Face++ API识别人脸
- [加速]为conda添加国内镜像
- python之urllib
- python替换文件中的指定内容
- Python Import机制备忘
- Python学习-生成器
- Python处理JSON
- mysql-connector python几点问题
- Ubuntu14.04+Caffe+python配置总结(CPU版)
- python编码-1
- Python基本语法_基本数据类型_数值型详解
- python pil 第三方库实战之一:给图片加字
- python程序编写环境搭建入门