如何创建递归函数以创建值列表

2024-04-23 16:30:00 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我想了解递归是如何工作的。我知道递归反复调用自己。我很想知道递归是否可以用来解决简单的问题,比如创建从0到9的列表。下面是我试图转换为递归的程序:

用于循环版本

def create_list(start, count):
    mylist = []
    for i in range(start, start + count):
        mylist.append(i)
    return mylist


the_list = create_list(0, 8)

print(the_list)

中断的递归版本

def create_list(start, count):
    mylist = []
    mylist = create_list_recurse(start, start + count)
    return mylist


def create_list_recurse(start, end):
    if start >= end:
        return

    create_list_recurse(start + 1, end)

print(create_list(0, 9))

我陷入了让递归版本工作的困境。程序将只返回一个值列表。请告诉我我是否采取了错误的方法来解决这个问题


Tags: the程序版本列表forreturndefcount
3条回答

您的问题是递归函数必须返回上一级别的值。递归函数还必须有一个终止条件,这样它就不会一直调用自己。列表函数是一个有趣的示例,您要做的是生成列表的一个元素和一个较短的列表:

def create_list(start, length):
    if length:
        return [start]+create_list(start+1, length-1)
    else:
        return []

print (create_list(0,8))

Mark和RufusVS解释得很好,但是如果你想了解你的代码,因为你问你做错了什么。这是:

def create_list(start, count):
    mylist = []
    mylist = create_list_recurse(start, start + count)
    return mylist


def create_list_recurse(start, end):
    #print(start, end)
    if start < end:
        return [start] + create_list_recurse(start + 1, end)
    elif start==end:
        return [start]

print(create_list(0, 9))

您不需要第二个函数或任何外部变量。您只需要一个边条件就可以知道何时停止,然后再执行递归。在这里,有些东西可以创建列表的一部分,然后递归得到其余部分

首先考虑边缘情况,然后考虑一个递归调用会发生什么,这通常是有帮助的

您还需要记住从函数返回(并考虑边缘条件应该返回什么(例如空列表):

def create_list_recurse(start, end):
    if start > end:
        return []

    return [start] + create_list_recurse(start + 1, end)

create_list_recurse(0, 9)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

create_list_recurse(3, 1) #edge case returns empty 
# []

相关问题 更多 >