2015-03-25 96 views
0

我想要构建一个RECURSIVE函数,它采用自然数n并返回一个从0开始到n结束的数字元组。因此,rec_range(5)返回(0,1,2,3,4),rec_range(1)返回(0,)。返回元组的递归函数python

这是我到目前为止有:

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) 

我不知道下一步该怎么做。另外,应该注意的是我无法测试这个函数,因为有一个无效的语法错误。

回答

1

在Python中,你可以连接元组与+

def rec_range(n): 
    if n == 0: 
     return (0,) 
    else: 
     return rec_range(n - 1) + (n,) 
+0

您选择正确的,但有一个类型的错误...类型错误:不支持的操作数类型(S)为+: '诠释' 和 '元组' – holaprofesor 2015-03-25 02:37:16

+0

@JaredBanton'rec_range(10)'对我的作品在Python 2.7&3 – axblount 2015-03-25 02:41:39

+0

是的,它的工作原理...我的坏 – holaprofesor 2015-03-25 02:46:25

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)