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,有人可以指出我的功能问题吗?谢谢。
答案 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。