第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶有遞歸函數(shù)的回文檢查,無需切片和循環(huán)

帶有遞歸函數(shù)的回文檢查,無需切片和循環(huán)

幕布斯7119047 2021-09-14 15:57:20
我有一個作業(yè),我必須制作一個 python 代碼,使用返回布爾值的遞歸函數(shù)檢查字符串是否為回文,但不允許使用反向切片或循環(huán),也不允許更改函數(shù)格式,這是我的代碼,但它一直返回 Truedef is_palindrome(s):    res = []    s = ['']    if len(s) < 2:        return True    else:        rev_s = is_palindrome(s[1:]) + s[0]        res.append(rev_s)        if res == s:            return True        return False
查看完整描述

3 回答

?
回首憶惘然

TA貢獻(xiàn)1847條經(jīng)驗 獲得超11個贊

您可以檢查給定字符串的第一個和最后一個字符是否相同,然后遞歸檢查剩余的字符串是否為回文:

def is_palindrome(s):
    return len(s) < 2 or s[0] == s[-1] and is_palindrome(s[1:-1])


查看完整回答
反對 回復(fù) 2021-09-14
?
千巷貓影

TA貢獻(xiàn)1829條經(jīng)驗 獲得超7個贊

如果提到的函數(shù)簽名def is_palindrome(s)是你老師給的簽名,那么沒問題,不需要傳遞任何額外的參數(shù)來實現(xiàn)目標(biāo)。


你的老師(或者給你這個任務(wù)的老師很棒)只是想看看你是如何只用 1 個參數(shù)來處理這個問題的。


概念很簡單,只需(to list with 3 values)在第二次遞歸調(diào)用中更改參數(shù)類型即可。


def is_palindrome(s):

    if type(s) is str:

        l = len(s) 


        if l == 0 or l == 1:

            return True

        else:

            return is_palindrome([s, 0, -1])

    else:

        string, start, end = s # s is list here


        if string[start] != string[end]:

            return False

        else:

            if(start + 1 >= end - 1):

                return True


            return is_palindrome([s, start + 1, end - 1])


def main():

    string1 = "abcba"

    string2 = "abcde"

    string3 = "AxxA"


    print(is_palindrome(string1)) # True

    print(is_palindrome(string2)) # False

    print(is_palindrome(string3)) # True


main();

以下內(nèi)容不是您要查找的內(nèi)容,但可能是您將來要查找的內(nèi)容。


>>> def is_palindrome(s):

...     if s == "".join(reversed(s)):

...         return True

...     else:

...         return False

...

>>> is_palindrome("ABA")

True

>>>

>>> is_palindrome("ABC")

False

>>>

>>> is_palindrome("XXZZXX")

True

>>>

>>> is_palindrome("@#7")

False

>>>

>>> is_palindrome("1@#@1")

True

>>>

謝謝你。


查看完整回答
反對 回復(fù) 2021-09-14
?
慕妹3146593

TA貢獻(xiàn)1820條經(jīng)驗 獲得超9個贊

我不確定這是否算作“更改函數(shù)格式”,但這是我對沒有切片的遞歸版本的嘗試:


def is_palindrome(s):

  def is_palindrome_r(i, j):

    if j <= i:

      return True

    if s[i] != s[j]:

      return False

    return is_palindrome_r(i + 1, j - 1)


  return is_palindrome_r(0, len(s) - 1)

內(nèi)部函數(shù)is_palindrome_r是采用兩個索引i和的遞歸函數(shù)j。最后一行在0(字符串的開頭)和len(s) - 1(字符串的結(jié)尾)設(shè)置這兩個索引的初始位置,并繼續(xù)執(zhí)行遞歸邏輯。遞歸函數(shù)有兩個退出條件:


如果j <= i我們到達(dá)了回文的中心。如果我們已經(jīng)走到這一步,我們知道所有其他字符對都匹配,我們不需要再進(jìn)行任何比較。

如果兩個角色的指向i和j 不匹配,這絕對不是一個回文,我們不需要做任何更多的比較。

否則我們還不知道序列是否完全回文,所以我們將索引向內(nèi)移動一步 ( i + 1, j - 1) 并返回到步驟 1。


查看完整回答
反對 回復(fù) 2021-09-14
  • 3 回答
  • 0 關(guān)注
  • 222 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號