我想构建一个RECURSIVE函数,它接受一个自然数n并返回一个以0开头并在n之前结束的数字元组。所以rec_range(5)返回(0,1,2,3,4),rec_range(1)返回(0,)。
这是我到目前为止所做的:
def rec_range(n):
"""returns a tuple of numbers starting with 0 and ending before n
natural number -> tuple of numbers"""
if n = 0:
return 0
else:
return rec_range(0, n)
我不知道下一步该做什么。另外,应该注意到我无法测试此函数,因为语法错误无效。
答案 0 :(得分:2)
在python中,您可以使用+
连接元组。
def rec_range(n):
if n == 0:
return (0,)
else:
return rec_range(n - 1) + (n,)
答案 1 :(得分:0)
将rec_range(n)定义为返回计数元组< n,按升序排列。这模仿了自然数的集合论定义。除非教师的命令不同,否则rec_range(0)应该(逻辑上)是一个空元组()。
元组的重复连接将应该是O(n)函数(附加到列表)转换为O(n * n)函数。如果需要元组而不是列表,则转换为元组可能是最后一步。这是一个O(n)tail_recursive解决方案。
def rec_range(n, answer=None):
if answer is None:
answer = []
if n > 0:
n -= 1
answer.append(n)
return rec_range(n, answer)
else:
return tuple(reversed(answer))
print(rec_range(0), rec_range(1), rec_range(10))
#() (0,) (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)