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

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

在遞歸中使用和不使用'return'調(diào)用函數(shù)有什么區(qū)別?

在遞歸中使用和不使用'return'調(diào)用函數(shù)有什么區(qū)別?

慕姐4208626 2023-06-06 16:10:45
我嘗試創(chuàng)建用于生成 Pascal 三角形的遞歸函數(shù),如下所示。    numRows = 5    ans=[[1],[1,1]]              def pascal(arr,pre,idx):        if idx==numRows:            return ans                   if len(arr)!=idx:            for i in range (0,len(pre)-1,1):                arr+=[pre[i]+pre[i+1]]                if len(arr)==idx:            arr+=[1]            ans.append(arr)            pascal([1],arr,idx+1)            a = pascal([1],ans[1],2)    return a我得到的輸出是一個(gè)空列表[ ]。但是如果我return在調(diào)用時(shí)pascal添加            return pascal([1],arr,idx+1)輸出是正確的[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]。據(jù)我了解,a應(yīng)該由 分配return ans。那么為什么在沒(méi)有a電話的情況下沒(méi)有得到答案,為什么在這種情況下有必要呢?pascalreturnreturn
查看完整描述

4 回答

?
HUWWW

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

當(dāng)你有遞歸時(shí),你通常會(huì)以某種方式組合返回值??梢允强偤停珈巢瞧鯏?shù)列:


fibonacci(n+1) = fibonnaci(n)+fibonacci(n-1)

或?qū)⒁粭l線附加到矩陣,就像您的情況一樣。反正沒(méi)有回報(bào)就沒(méi)有信息可以結(jié)合!考慮沒(méi)有回報(bào)的斐波那契案例:


def fibonnaci(n):

  if n<2:

    return 1

  

  fib_ans = fibonnaci(n-2)+fibonnaci(n-1)

在這種情況下,如果我調(diào)用fibonnaci(0)或fibonnaci(1)輸出將是 1,就像您在 idx == numRows 時(shí)返回 ans,但是如果我調(diào)用fibonnaci(2),則變量 fib_ans 將收到 2,這是預(yù)期的答案,但它可以在函數(shù)的范圍。Python“將添加”return None到我函數(shù)的末尾,就在 fib_ans 屬性的下方。所以,我需要返回 fib_ans


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

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

當(dāng)你這樣做時(shí)pascal([1],arr,idx+1),你正在進(jìn)行遞歸調(diào)用,但隨后丟棄它返回的值。如果要將其返回給調(diào)用者,則需要顯式使用return pascal(...).


事實(shí)上,遞歸在這個(gè)例子中是沒(méi)有必要的。您可以輕松地重構(gòu)您的代碼以使用一個(gè)簡(jiǎn)單的for循環(huán)。例如:


def pascal(numRows):

    ans = [[1]]

    for _ in range(1, numRows):

        pre = ans[-1]

        arr = [1]

        for i in range(0,len(pre)-1,1):

            arr+=[pre[i]+pre[i+1]]

        arr+=[1]

        ans.append(arr)

    return ans


print(pascal(5))

(根據(jù)慣例,我在這里使用名稱_作為循環(huán)變量,因?yàn)樗且粋€(gè)不在循環(huán)內(nèi)使用的虛擬變量,但您可以使用其他名稱,例如,如果您愿意的話。)forrow


上面的代碼盡可能接近原始代碼,但您還應(yīng)該考慮使用arr.append(value)代替arr += [value]——這是將單個(gè)值附加到列表的正常方法。


查看完整回答
反對(duì) 回復(fù) 2023-06-06
?
千巷貓影

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

據(jù)我所知,如果你想獲得價(jià)值,你需要“返回”聲明......

關(guān)鍵是如果你沒(méi)有“回報(bào)”,你將得不到任何回報(bào)......

希望這有助于..


查看完整回答
反對(duì) 回復(fù) 2023-06-06
?
函數(shù)式編程

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

對(duì)于所有具有關(guān)鍵字的算法語(yǔ)言,return它完全退出最近的函數(shù),其結(jié)果是返回參數(shù)的表達(dá)式的結(jié)果。例如。


def test(v):

  if v == 0:

    return someFun(10)

  ...

如果v為零,則函數(shù)的結(jié)果是 返回的值someFun(10)。由 ... 表示的函數(shù)的其余部分永遠(yuǎn)不會(huì)執(zhí)行,除非v是非零值。


如果我們不寫(xiě)相同的return:


def test(v):

  if v == 0:

    someFun(10)

  ...

現(xiàn)在, when vis zerosomeFun(10)仍然被調(diào)用,但是它返回的值被丟棄,為了讓它具有任何真正的意義,someFun需要做一些副作用,比如打印、存儲(chǔ)值、更新對(duì)象。此外,所有由 ... 表示的功能的其余部分在someFun(10)完成后繼續(xù)。


return對(duì)于 Python 和許多其他語(yǔ)言來(lái)說(shuō),根本沒(méi)有 a并不意味著它不返回任何東西。在 Python 中,return None每個(gè)函數(shù)/方法的最后一行都有一個(gè)不可見(jiàn)的。


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

添加回答

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