python不能無限的遞歸調用下去。并且當輸入的值太大,遞歸次數太多時,python 都會報錯
成都創新互聯公司主營嵊州網站建設的網絡公司,主營網站建設方案,app軟件定制開發,嵊州h5微信小程序開發搭建,嵊州網站營銷推廣歡迎嵊州等地區企業咨詢
首先說結論,python解釋器這么會限制遞歸次數,這么做為了避免"無限"調用導致的堆棧溢出。
tail recursion 就是指在程序最后一步執行遞歸。這種函數稱為 tail recursion function。舉個例子:
這個函數就是普通的遞歸函數,它在遞歸之后又進行了 乘 的操作。 這種普通遞歸,每一次遞歸調用都會重新推入一個調用堆棧。
把上述調用改成 tail recursion function
tail recursion 的好處是每一次都計算完,將結果傳遞給下一次調用,然后本次調用任務就結束了,不會參與到下一次的遞歸調用。這種情況下,只重復用到了一個堆棧。因此可以優化結構。就算是多次循環,也不會出現棧溢出的情況。這就是 tail recursion optimization 。
c和c++都有這種優化, python沒有,所以限制了調用次數,就是為了防止無限遞歸造成的棧溢出。
如果遞歸次數過多,導致了開頭的報錯,可以使用 sys 包手動設置recursion的limit
手動放大 recursionlimit 限制:
首先python是支持遞歸的(但是對遞歸層數有限制,如果超過了限制會報錯),所以出錯有可能是你程序的問題,最好貼出你的程序和錯誤信息。
如果解決了您的問題請采納!
如果未解決請繼續追問
函數add_沒有返回任何東西,或者說返回值是None
因此n+add_(n-1)是int型與None相加,這在Python中是非法的
于是TypeError發生。
使用遞歸一定要有退出遞歸的條件,在你的函數里:if l[mid] == aim:應該是退出的條件,但是你的例子卻無法滿足這個條件,所以就超過深度報錯了。
本文標題:python函數遞歸報錯 python跳出遞歸
標題來源:http://vcdvsql.cn/article26/dosdcjg.html
成都網站建設公司_創新互聯,為您提供網站建設、網站導航、標簽優化、、品牌網站制作、域名注冊
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯