作为递归练习练习,我正在编写一个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'。一般问题:如何正确地在列表中递归迭代?我的具体问题:我在这里做错了什么?
答案 0 :(得分:5)
你很接近,你想调用返回的递归
else:
if listA[0] <= listA[1]:
return sorted(listA[1:])
或者你可以将两个陈述合并到回报中(并摆脱其他)
return listA[0] <= listA[1] and sorted(listA[1:])
答案 1 :(得分:2)
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:])