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)