您的位置:首页 > 编程语言 > Python开发

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: