4 回答

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

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è)值附加到列表的正常方法。

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
據(jù)我所知,如果你想獲得價(jià)值,你需要“返回”聲明......
關(guān)鍵是如果你沒(méi)有“回報(bào)”,你將得不到任何回報(bào)......
希望這有助于..

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)的。
添加回答
舉報(bào)