js遞歸算法經(jīng)典實(shí)例 尾遞歸究竟是好是壞?
尾遞歸究竟是好是壞?如果遞歸級別太多,則會(huì)出現(xiàn)堆棧溢出異常,因?yàn)槊看握{(diào)用都會(huì)生成一個(gè)新的堆棧幀,并使用此堆棧幀保留當(dāng)前函數(shù)的狀態(tài)值。如果不需要保存狀態(tài)值,則可以重用堆棧幀而不會(huì)導(dǎo)致堆棧溢出。以n的階乘
尾遞歸究竟是好是壞?
如果遞歸級別太多,則會(huì)出現(xiàn)堆棧溢出異常,因?yàn)槊看握{(diào)用都會(huì)生成一個(gè)新的堆棧幀,并使用此堆棧幀保留當(dāng)前函數(shù)的狀態(tài)值。如果不需要保存狀態(tài)值,則可以重用堆棧幀而不會(huì)導(dǎo)致堆棧溢出。
以n的階乘為例:
正常遞歸:
如果n=3,則每一步都需要保留n值和下一個(gè)函數(shù)的返回值,因此每次調(diào)用都需要?jiǎng)?chuàng)建一個(gè)新的堆棧幀
尾部遞歸:
如果n=3,則每次調(diào)用都可以重用堆棧幀,因?yàn)椴恍枰4鏍顟B(tài)值。
因此,當(dāng)遞歸在當(dāng)前堆棧幀執(zhí)行后完成時(shí),它不需要保留當(dāng)前堆棧幀,但根據(jù)當(dāng)前堆棧幀的結(jié)果,它可以在進(jìn)入下一個(gè)堆棧幀時(shí)優(yōu)化為尾部遞歸。通常,尾部遞歸需要滿足遞歸調(diào)用是函數(shù)體中最后執(zhí)行的語句。例如,在factorial示例中,要執(zhí)行的最后一條語句是直接調(diào)用factorial(n-1,n*result),而不是表達(dá)式n*factorial(n-1)。如果是表達(dá)式,則需要堆棧幀來保留N和階乘(N-1)的結(jié)果。
如何在Python中實(shí)現(xiàn)尾遞歸優(yōu)化?
Python不會(huì)優(yōu)化尾部遞歸。默認(rèn)情況下,遞歸的最大深度約為1000。當(dāng)然,可以修改底層的默認(rèn)最大深度。但是我們可以使用Python內(nèi)置的yield將尾部遞歸函數(shù)轉(zhuǎn)換為生成器。我只需要連續(xù)執(zhí)行它的下一個(gè)方法。這是我自己寫的帖子
新網(wǎng)站優(yōu)化3分
1。選擇合適的關(guān)鍵詞和版式
萌新如果你沒有太多的經(jīng)驗(yàn),建議在關(guān)鍵詞選擇方面,你可以找到同行業(yè)排名前十的網(wǎng)站,記錄下他們網(wǎng)站的標(biāo)題和描述,制作表格進(jìn)行刷選,然后比較刷選,選出你最好的。當(dāng)然,你也可以使用一些免費(fèi)的關(guān)鍵字工具,比如市場上的GA來擴(kuò)展關(guān)鍵字
! 2. 合理規(guī)劃頁面內(nèi)容
2內(nèi)容設(shè)計(jì)一定要注意內(nèi)頁的優(yōu)化,包括標(biāo)題優(yōu)化、關(guān)鍵字布局、ALT標(biāo)簽、粗體、斜體、nofollow/do follow。標(biāo)簽的使用要合理,不能在寫一篇文章時(shí)大量使用H標(biāo)簽,H標(biāo)簽主要用來突出主題,不能濫用,粗體標(biāo)簽也要控制,一般一篇文章出現(xiàn)3-5個(gè)就夠了,ALT說明并結(jié)合實(shí)際圖片,不要堆積太多關(guān)鍵詞。nofollow的使用非常重要,因?yàn)榘俣仁詹氐膬?yōu)先權(quán)是標(biāo)題
3。如何快速被收錄
網(wǎng)站建成后,登錄百度后臺(tái)申請收藏。具體方法請參考鏈接https://jingyan.baidu.com/article/6b97984de19b81ca3b0bf4c.html
同時(shí),您可以在其他網(wǎng)站發(fā)布新聞和網(wǎng)站鏈接,如新聞網(wǎng)站,或官方賬號(hào)閱讀原文,鏈接到自己的網(wǎng)站,這不僅有利于快速收錄,而且具有一定的實(shí)用價(jià)值對未來的SEO有一定的影響。