簡體   English   中英

一個遞歸函數,用於檢查int列表是否按升序排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM