Python 递归:范围
Python Recursion: Range
我需要定义一个名为 rec_range(n) 的函数,它接受一个自然数和 returns 一个最多为 n 的数字元组。
即rec_range(5) returns (0,1,2,3,4)
rec_range(1) returns (0,)
这是我到目前为止的想法。
def rec_range(n):
"""takes a natural number n and 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(n-1), )
这适用于 rec_range(1)。
***限制是:必须递归定义,不能使用列表、循环或使用现有的 range() 函数
我会这样写:
def rec_range(n):
if n < 1:
return ()
else:
return rec_range(n - 1) + (n - 1,)
print(rec_range(4)) # prints (0, 1, 2, 3)
这也可以处理否定参数。
我认为这很简洁:
def rec_range(n):
if not n <= 1: return rec_range(n-1) + (n-1,)
return (0,)
基本上你向下递归直到你到达 1,并且对于每个递归,比你刚刚递归到你的元组的位置明智的数字少一。
输出:
>>>rec_range(4)
(0, 1, 2, 3)
继续连接少一的元组,直到达到一:
rec_range = lambda n: rec_range(n - 1) + (n - 1,) if n > 0 else ()
单线怎么样:
def rec_range(n):
return rec_range(n-1) + (n-1,) if n > 0 else ()
或使用 lambda:
rec_range = lambda n: rec_range(n-1) + (n-1,) if n > 0 else ()
这个很简单:
def getrange(a,b,c=1):
if a < b:
print(a)
a+=c
getrange(a,b,c)
else:
return
getrange(0,30,2)
我需要定义一个名为 rec_range(n) 的函数,它接受一个自然数和 returns 一个最多为 n 的数字元组。
即rec_range(5) returns (0,1,2,3,4) rec_range(1) returns (0,)
这是我到目前为止的想法。
def rec_range(n):
"""takes a natural number n and 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(n-1), )
这适用于 rec_range(1)。
***限制是:必须递归定义,不能使用列表、循环或使用现有的 range() 函数
我会这样写:
def rec_range(n):
if n < 1:
return ()
else:
return rec_range(n - 1) + (n - 1,)
print(rec_range(4)) # prints (0, 1, 2, 3)
这也可以处理否定参数。
我认为这很简洁:
def rec_range(n):
if not n <= 1: return rec_range(n-1) + (n-1,)
return (0,)
基本上你向下递归直到你到达 1,并且对于每个递归,比你刚刚递归到你的元组的位置明智的数字少一。
输出:
>>>rec_range(4)
(0, 1, 2, 3)
继续连接少一的元组,直到达到一:
rec_range = lambda n: rec_range(n - 1) + (n - 1,) if n > 0 else ()
单线怎么样:
def rec_range(n):
return rec_range(n-1) + (n-1,) if n > 0 else ()
或使用 lambda:
rec_range = lambda n: rec_range(n-1) + (n-1,) if n > 0 else ()
这个很简单:
def getrange(a,b,c=1):
if a < b:
print(a)
a+=c
getrange(a,b,c)
else:
return
getrange(0,30,2)