一个递归函数,用于检查int列表是否按升序排序

时间:2014-11-10 06:08:59

标签: python

def is_sorted(s):
    if s==[]:
       return True
    else:
       return s[0]<is_sorted(s[1:])

调用此函数应该得到:

#1 is_sorted([])-->True
#2 is_sorted([1,2,3,4,5,6,7])-->True
#3 is_sorted([1,2,3,7,4,5,6])-->False

但我的功能总是在#2上返回False而不是True,有人可以指出我的功能问题吗?谢谢。

4 个答案:

答案 0 :(得分:5)

问题:

问题在于您将s[0](整数)与is_sorted(s[1:])的返回值进行比较,这是一个布尔值。 (这有点模糊,因为python会自动将布尔值转换为整数(0或1))

要修复:

您的返回值必须是布尔值(在输出中指定),因此您需要进行不同的比较和不同的递归调用。

答案 1 :(得分:3)

以下是您的代码的工作版本:

def is_sorted(s):
    if len(s) in [0,1]:
        return True
    if s[0] <= s[1]:
        return is_sorted(s[1:])
    return False

答案 2 :(得分:2)

如果is_sorted(s[1:])True,那么s[0]<is_sorted(s[1:])仅在s[0]<True等同于s[0] < 1

时才为真

答案 3 :(得分:1)

正如pjz所说,你的问题是你的else语句之后的布尔比较。尝试循环遍历列表中每个元素的行,并检查每个数字是否大于最后一个。您可能还想检查每个数字是否为数字,并返回false。