我目前正在上Python和计算理论入门课,最近期中考试中有一道难题我根本无法解决。它涉及为添加数字的程序编写代码。我相信这个问题应该使用递归。我不记得这个问题到底是如何措辞的,但这是基本的想法。
实施multiadder(n)
函数,它接受一个非负整数n
并添加n
任意值在一起。每个要添加的值必须作为单独的调用编写。例如:
>>> multi_three = multiadder(3)
>>> multi_three(1)(2)(3)
6
>>> multiadder(5)(1)(2)(3)(4)(5)
15
代码必须通过填空来编写。
def multiadder(n):
assert n > 0
if _________________________ :
return _________________________
else:
return _________________________
我们在课堂上讨论的主题是高阶函数、递归、lambda 和控制语句。我们不允许使用列表和集合等数据结构,也不允许导入任何内容。
请有人帮忙。这是我唯一考不上的问题!
尝试这个:
def multiadder(n):
assert n > 0
if n == 1:
return lambda t: t
else:
return lambda a: lambda b: multiadder(n-1)(a+b)
if __name__ == '__main__':
print(multiadder(5)(1)(2)(3)(4)(5))
For n == 1
,结果必须是返回输入的函数。
For n > 1
,将结果包装起来n-1
,通过添加输入。
这也适用于连接字符串和其他累积操作:
>>> multiadder(3)('p')('q')('r')
pqr
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)