【问题标题】:How to create a recursive function to create a list of values如何创建递归函数来创建值列表
【发布时间】:2020-11-01 08:43:26
【问题描述】:

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

For循环版本

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))

我在递归版本的工作中遇到了困难。该程序将只返回一个值列表。请告诉我我是否采取了错误的方法来解决这个问题。

【问题讨论】:

  • @Omni 这是因为注释掉的返回。我解决了。仍然对应该去那里感到困惑。
  • 递归解法:def create_list(start, end):try: return create_list(start, end)except RuntimeError: return list(range(start, end))
  • 对不起,我应该指出,上述不是一个严肃的解决方案。

标签: python recursion


【解决方案1】:

您不需要第二个函数或任何外部变量。您只需要一个边缘条件来知道何时停止,然后递归执行某些操作。在这里,某些东西可以创建您列表的一部分并递归获取其余部分。

首先考虑边缘情况通常会有所帮助,然后再考虑一次递归调用会发生什么。

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

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 
# []

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      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))
      

      【讨论】:

        猜你喜欢
        • 2017-07-08
        • 1970-01-01
        • 2020-02-16
        • 1970-01-01
        • 2012-08-23
        • 2017-03-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多