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

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

編寫遞歸函數(shù)來求解斐波那契數(shù)列

編寫遞歸函數(shù)來求解斐波那契數(shù)列

PHP
www說 2023-11-09 10:56:24
我想用 Python 編寫斐波那契遞歸函數(shù)。x是起點(diǎn),y是后續(xù)點(diǎn)x,l是長(zhǎng)度。我不明白我的思維錯(cuò)誤是什么: def fib(x, y, l, fibList=None):    fibList = []    z = x + y    x = y    fibList.append(z)    y = z    if len(fibList) <= l:        return fib(x, y, l, fibList)    else:        return(fibList)結(jié)果是:RecursionError: maximum recursion depth exceeded while calling a Python object我可以用 for 循環(huán)來解決它,但不能用遞歸函數(shù)來解決。
查看完整描述

3 回答

?
米脂

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

這里有一些問題。一旦修復(fù)了無限遞歸,問題仍然存在。


您不需要每次fib調(diào)用函數(shù)時(shí)都初始化列表,而只需在第一次fibList未提供參數(shù)時(shí)初始化列表,因此默認(rèn)為None.


您的代碼無法生成序列中的前兩個(gè)數(shù)字0和1。您可以通過簡(jiǎn)單地初始化列表以包含這些術(shù)語(yǔ)并調(diào)整邏輯以僅提供 N-2 個(gè)術(shù)語(yǔ)來解決此問題。


可以改進(jìn)函數(shù)的簽名,以使調(diào)用者更容易使用它。呼叫者只關(guān)心他/她想要的術(shù)語(yǔ)數(shù)量。用戶不必知道要輸入什么初始值x和y值。


這是代碼的一個(gè)版本,修復(fù)了無限遞歸、修復(fù)了缺失的術(shù)語(yǔ),并且還重新排列了簽名,以便用戶可以簡(jiǎn)單明了地調(diào)用該函數(shù):


def fib(l, x=0, y=1, fibList=None):

? ? if fibList is None:

? ? ? ? fibList = [0, 1]

? ? z = x + y

? ? x = y

? ? fibList.append(z)

? ? y = z


? ? if len(fibList) < l-1:

? ? ? ? return fib(l, x, y, fibList)

? ? else:

? ? ? ? return(fibList)


print(fib(10))

結(jié)果:


[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]


查看完整回答
反對(duì) 回復(fù) 2023-11-09
?
POPMUISE

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

在你設(shè)置的第二行fibList = []。這意味著每次遞歸調(diào)用該函數(shù)時(shí),它都會(huì)將列表重置為空,因此len(fibList)始終等于 1。

刪除該行,以便 fibList 變量不會(huì)重置,然后它應(yīng)該正確滿足您的退出條件?,F(xiàn)在是這樣寫的,它會(huì)永遠(yuǎn)運(yùn)行,直到損壞為止。


查看完整回答
反對(duì) 回復(fù) 2023-11-09
?
瀟瀟雨雨

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

fib在每個(gè)函數(shù)調(diào)用開始時(shí),您可以使用 清除您的fibList值fibList = []。因此列表的長(zhǎng)度將始終為<= 1,因此您會(huì)遇到無限遞歸循環(huán),這不好。你需要添加類似的東西if fibList is None:


當(dāng)您首次調(diào)用函數(shù)“fib”而未在參數(shù)列表中提供任何第四條語(yǔ)句時(shí),fibList 的值最初將設(shè)置為“None”。但稍后,當(dāng)您再次遞歸調(diào)用函數(shù)“fib”時(shí),您將在參數(shù)列表中提供一個(gè) fibList。所以該值不再是“無”。因此,當(dāng)添加如上所述的 if 語(yǔ)句時(shí),該函數(shù)知道您何時(shí)從外部調(diào)用該函數(shù)(當(dāng)您在代碼中將其調(diào)用為“fib(1,2,10)”時(shí)),或者何時(shí)該函數(shù)遞歸地調(diào)用自身。因此,您不必每次調(diào)用該函數(shù)時(shí)都重置 fibList,而是在開始時(shí)僅設(shè)置 1 次。


def fib(x, y, l, fibList=None):

    if fibList is None:

        fibList = []

    z = x + y

    ...


查看完整回答
反對(duì) 回復(fù) 2023-11-09
  • 3 回答
  • 0 關(guān)注
  • 174 瀏覽

添加回答

舉報(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)