Python 链表和递归问题理解代码
我目前正在学习LinkedList和递归,但我很难理解下面的代码(函数分区(n,m)) 在这本教科书中,LinkedList是以(第一,其余)对的形式给出的。这个函数试图计算用大小不超过m的部分划分整数n的方法的数量Python 链表和递归问题理解代码,python,function,recursion,lambda,linked-list,Python,Function,Recursion,Lambda,Linked List,我目前正在学习LinkedList和递归,但我很难理解下面的代码(函数分区(n,m)) 在这本教科书中,LinkedList是以(第一,其余)对的形式给出的。这个函数试图计算用大小不超过m的部分划分整数n的方法的数量 >>> def partitions(n, m): """Return a linked list of partitions of n using parts of up to m. Each partition i
>>> def partitions(n, m):
"""Return a linked list of partitions of n using parts of up to m.
Each partition is represented as a linked list.
"""
if n == 0:
return link(empty, empty) # A list containing the empty partition
elif n < 0 or m == 0:
return empty
else:
using_m = partitions(n-m, m)
with_m = apply_to_all_link(lambda s: link(m, s), using_m)
without_m = partitions(n, m-1)
return extend_link(with_m, without_m)
>>> def apply_to_all_link(f, s):
"""Apply f to each element of s."""
assert is_link(s)
if s == empty:
return s
else:
return link(f(first(s)), apply_to_all_link(f, rest(s)))
>>> def extend_link(s, t):
"""Return a list with the elements of s followed by those of t."""
assert is_link(s) and is_link(t)
if s == empty:
return t
else:
return link(first(s), extend_link(rest(s), t))
def分区(n,m):
“”“返回n个分区的链接列表,使用最多m个分区的部分。
每个分区都表示为一个链表。
"""
如果n==0:
返回链接(空,空)#包含空分区的列表
如果n<0或m==0:
返回空
其他:
使用_m=分区(n-m,m)
with_m=将_应用于_all_链接(lambda s:link(m,s),使用_m)
无_m=分区(n,m-1)
返回扩展链接(有、无)
>>>def应用到所有链接(f,s):
“”“将f应用于s的每个元素。”
断言是链接
如果s==空:
返回s
其他:
返回链接(f(第一个),应用到所有链接(f,其余)
>>>def扩展_链接(s,t):
“”“返回一个列表,其中元素s后跟元素t。”
断言是链接(s)和是链接(t)
如果s==空:
返回t
其他:
返回链接(第一个链接、延伸链接(其余链接、t))
我不明白的是,为什么在else语句中,我们会在使用m时使用apply_to_all_链接,但对于不使用m的情况,我们不会这样做,而是直接将分区应用于n和m-1。我想一个更基本的问题是我也不确定lambda函数到底在做什么,尽管我想我知道它在用分区m创建一个LinkedList,并递归调用n-m。为什么我们不能只使用with_m=分区(n-m,m)和with_m=分区(n,m-1)并返回extend_link(with_m,with_m)
请让我知道,如果任何部分的代码需要更多的澄清和提前感谢