递归识别排序列表

时间:2013-07-23 21:55:07

标签: python list sorting recursion python-3.x

作为递归练习练习,我正在编写一个Python函数,以递归方式识别输入列表是否从最小到最大,实数排序,然后返回一个布尔值。

我的代码是:

def det_sorted(listA):
    if len(listA) == 1:
        return(True)
    else:
        if listA[0] <= det_sorted(listA[1:]):
            return(True)
        elif listA[0] > det_sorted(listA[1:]):
            return(False)

此函数始终返回'False'。一般问题:如何正确地在列表中递归迭代?我的具体问题:我在这里做错了什么?

4 个答案:

答案 0 :(得分:5)

你很接近,你想调用返回的递归

else:
        if listA[0] <= listA[1]:
             return sorted(listA[1:])

或者你可以将两个陈述合并到回报中(并摆脱其他)

return  listA[0] <= listA[1] and sorted(listA[1:])

答案 1 :(得分:2)

@Joran比斯利的回答是正确的,但这是问题的另一个解决方案应该更快一点:

def is_sorted(l, prev=None):
    if l:
        if prev is None: return is_sorted(l[1:], l[0])
        else: return l[0] > prev and is_sorted(l[1:], l[0])
    else:
        return True

答案 2 :(得分:0)

这是一个非常明确的脚本。

def det_sorted(listA):
    if len(listA) == 1:
        return(True)
    else:
        if det_sorted(listA[1:]) == True:
            if listA[0] <= listA[1]:
                return(True)
            elif listA[0] > listA[1]:
                return(False)
        else:
            return(False)

答案 3 :(得分:0)

您的函数没有考虑listA为空的情况,它应该按照排序进行评估。所以完整的功能应如下所示:

def is_sorted(listA):
  if len(listA) == 0 and len(listA) == 1:
      return True
  else:
      return  listA[0] <= listA[1] and is_sorted(listA[1:])

这可以缩短一点:

def is_sorted(listA):
  if not (listA and listA[1:])
      return True
  return listA[0] <= listA[1] and is_sorted(listA[1:])