最近學(xué)習(xí) python,遇到一個(gè)遞歸的問(wèn)題。學(xué)習(xí)遞歸最容易理解就是裴波那契數(shù)列,這個(gè)我能理解,但是遇到了一個(gè)算階乘的問(wèn)題, 想不通看代碼。
def func(a1):
if a1 == 5:
return a1
return a1 * func(a1 + 1)
print (func(1))
這個(gè)遞歸如果是簡(jiǎn)單的 return func(a1 + 1) 我還好理解,但是加上這個(gè) a1 * 之后我就懵逼了。
我的理解:
調(diào)用函數(shù)第一次進(jìn)來(lái)a1 = 1, 不等于5走下面直接得到一個(gè)a1 * func(a1 +1)相當(dāng)于1 * func(2)這里因?yàn)槭?return的值所以結(jié)果是要返回的,2就是第一個(gè)的返回值,這時(shí)候a1 = 2繼續(xù)調(diào)用相當(dāng)于2 * (a1 + 1)(這時(shí)候a1 = 2了),那這個(gè)返回值就是6了,2*6=12,a1=12, 繼續(xù)調(diào)用12*13?
我這個(gè)算法感覺(jué)有點(diǎn)小牛逼,但是覺(jué)得我理解的也沒(méi)啥問(wèn)題,就是拿返回值繼續(xù)套嘛,所以懵逼了o(╯□╰)o
哪位小哥哥幫我捋一捋不勝感激。
觀察代碼可知,此函數(shù)是從1開(kāi)始遞增計(jì)算a1的階乘。以a1=5為例,算法邏輯如下:
1 當(dāng)傳入?yún)?shù)a1!=5時(shí),進(jìn)入return a1 * func(a1 + 1)語(yǔ)句。
2 當(dāng)傳入?yún)?shù)a1 ==5時(shí),直接返回a1的值,此時(shí)遞歸計(jì)算結(jié)束。
所以,這個(gè)函數(shù)的運(yùn)算步驟為:
loop1 :1*func(1+1);
loop2: func(1+1)=2*func(2+1);
loop3: func(2+1)=3*func(3+1);
loop4: func(3+1)=4*func(4+1);
loop5: func(4+1)=5;
最終結(jié)果為:12345=120
這個(gè)程序其實(shí)就是執(zhí)行 12345 = 120
執(zhí)行的步驟就是:
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專(zhuān)業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。