查找列表是否按降序排列

时间:2016-08-10 15:16:10

标签: list python-3.x recursion

我目前正在学习递归函数,我已经部分地解决了这个问题。

例如,如果输入为[4,4,3],则输出应为true。连续元素必须至少与前一个元素一样大。

这是我的代码:

def descending(l):
    x=0
    if len(l)==0 or len(l)==1:
        return True
    for value in range(0,len(l)):
         if l[value]>=l[value]+1:
             x=l[value]+1
             descending(l[x:len(l)])
             return True
         else:
             return False

让我知道为什么我的逻辑在某些情况下会失败。

5 个答案:

答案 0 :(得分:2)

如果你希望这个函数是递归的,它应该是这样的:)

def descending(l):
    if len(l) <= 1 or (len(l) == 2 and l[0] >= l[1]):
        return True
    else:
        if l[0] >= l[1]:
            return descending(l[1::])
        else:
            return False

答案 1 :(得分:2)

如果你想使用递归,你可以这样做:

def foo(l):
    if len(l) <= 1:
        return True
    f, *l = l
    return False if f < l[0] else foo(l)

但我强烈建议你不要使用递归来解决这类问题。

对语法的一点评论:f, *l = l会将f设置为l的第一个元素,并将l设置为l的一部分,它与:{{1}相同}

答案 2 :(得分:1)

对我来说,代码的关键失败是redux返回一个值,但是当你以递归方式调用它时,你会忽略它的返回值!

我不确定以前哪个答案比其他答案更多 Pythonic ,但我不喜欢他们的风格。我首先要清楚地列出你的基本情况,然后以递归结束:

descending()

我还有一个针对 return-else-return 逻辑的个人挂断:

def descending(array):
    if len(array) <= 1:
        return True

    if array[0] < array[1]:
        return False

    return descending(array[1:])

VS。简单地:

if x:
     return a
else:
     return b

答案 3 :(得分:1)

def decreasing(l):
    if l==[] or len(l) == 1:
        return(True)
    else:
        return( decreasing(l[1:]) if l[0] > l[1] else False)

答案 4 :(得分:0)

我认为你的代码有效,但它可能很容易变得更加pythonic。

def descending(l):
    if not l or len(l) == 1:
        return True
    elif l[0]>=l[1]:
         return descending(l[1:])
    else:
         return False