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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

使用 if 語(yǔ)句打印所有選項(xiàng)的遞歸函數(shù)

使用 if 語(yǔ)句打印所有選項(xiàng)的遞歸函數(shù)

猛跑小豬 2023-01-04 14:18:19
我希望我的函數(shù)打印所有選項(xiàng),如下所示:year: 2017 month: 1year: 2017 month: 2year: 2017 month: 3year: 2018 month: 1year: 2018 month: 2year: 2018 month: 3我寫了這段代碼:years = [2017, 2018]years_index = 0month = 1def parse():    global years    global years_index    global month    print(str('year: ' + str(years[years_index])) + ' month: ' + str(month))       if years_index < len(years) -1:        if month < 3:            month +=1            parse()        else:            years_index +=1            month = 1            parse()      parse()我的代碼打印這個(gè):year: 2017 month: 1year: 2017 month: 2year: 2017 month: 3year: 2018 month: 1我做錯(cuò)了什么?
查看完整描述

3 回答

?
月關(guān)寶盒

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊

這里不需要遞歸:


from itertools import product



years = [2017, 2018]

months = [1, 2, 3]


for year, month in product(years, months):

    print(f'year: {year} month: {month}')

因?yàn)?Python 缺乏尾遞歸優(yōu)化并且調(diào)用用戶定義函數(shù)的成本相對(duì)較高,所以遞歸只應(yīng)在比循環(huán)更清晰的情況下使用。


查看完整回答
反對(duì) 回復(fù) 2023-01-04
?
Cats萌萌

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

是這樣的:


years = [2017, 2018]

years_index = 0

month = 1

def parse():

    global years

    global years_index

    global month

    print(str('year: ' + str(years[years_index])) + ' month: ' + str(month))

    if month < 3:

        month +=1

        parse()

    else:

        years_index +=1

        month = 1

        if years_index >= len(years):

            return


        parse()

parse()

我建議您重構(gòu)此代碼并使用循環(huán)而不是遞歸。


查看完整回答
反對(duì) 回復(fù) 2023-01-04
?
一只名叫tom的貓

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊

我試著在遞歸函數(shù)上做一些 OOP 來(lái)找點(diǎn)樂(lè)子。這是我解決它的方法,希望你能覺(jué)得它有用。基本上解決它需要在第一個(gè)條件中添加一個(gè)小于或等于,當(dāng)它完成時(shí),為了避免 IndexError,我使用了一個(gè) catch,因?yàn)樗穷A(yù)期行為的一部分。


class Example(object):



    #Define variables on an object level

    def __init__(self):

        self.years = [2017, 2018]

        self.years_index = 0

        self.month = 1


    def parse(self):

        try:

            print(str('year: ' + str(self.years[self.years_index])) + ' month: ' + str(self.month))   

            #Had to add an equal sign to make it work on the next year, otherwise it would stop here.

            if self.years_index <= len(self.years) -1:

                if self.month < 3:

                    self.month +=1

                else:

                    self.years_index +=1

                    self.month = 1

                self.parse()      

            pass

        #The catch block is used when the index gets higher than the list's length. So that it does not

        #cause an error, because it is the intended behavior for me. 

        except Exception as e:

            print('Ran out of years');



#Calling function

example = Example()

example.parse()


查看完整回答
反對(duì) 回復(fù) 2023-01-04
  • 3 回答
  • 0 關(guān)注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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