[英]A recursive function to check if a list of int are sorted in Ascending order
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,有人可以指出我的函數問題嗎? 謝謝。
問題是你將s[0]
(一個整數)與is_sorted(s[1:])
的返回值進行is_sorted(s[1:])
,這是一個布爾值。 (這有點模糊,因為python將布爾值自動轉換為整數(0或1))
您的返回值必須是布爾值(在輸出中指定),因此您需要進行不同的比較和不同的遞歸調用。
這是您的代碼的工作版本:
def is_sorted(s):
if len(s) in [0,1]:
return True
if s[0] <= s[1]:
return is_sorted(s[1:])
return False
如果is_sorted(s[1:])
為True
,則s[0]<is_sorted(s[1:])
僅在s[0]<True
等於s[0] < 1
正如pjz所說,你的問題是你的else語句之后的布爾比較。 嘗試循環遍歷列表中每個元素的行,並檢查每個數字是否大於最后一個。 您可能還想檢查每個數字是否為數字,並返回false。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.