欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解決python遞歸函數(shù)及遞歸次數(shù)受到限制的問題

 更新時間:2022年06月28日 10:12:05   作者:LLLLLLLLLLLLIU  
這篇文章主要介紹了解決python遞歸函數(shù)及遞歸次數(shù)受到限制的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

遞歸函數(shù)及遞歸次數(shù)受到限制

一個函數(shù)在內(nèi)部調(diào)用自己,那么這個函數(shù)是遞歸函數(shù)。遞歸會反復(fù)使用本身,每遞歸一次,越接近最終的值。當(dāng)一個問題可以由許多相似的小問題解決, 可以考慮使用遞歸函數(shù)。隨著遞歸的深入,問題規(guī)模相比上次都應(yīng)所減小。return函數(shù)本身的方法保證了遞歸的持續(xù)進行,但是如果沒有明確的結(jié)束條件,遞歸會無限進行下去。所以當(dāng)已經(jīng)到了問題解決的程度, 應(yīng)該告訴函數(shù)結(jié)束遞歸,這就需要明確的結(jié)束條件。

常見的兩個遞歸例子:求和、求階乘n!

求和:sum=n+n(n-1)+…+1

def sum(n):
? ? if n > 0: ? ? ? ? ? ? ?
? ? ? ? return n+sum(n-1)
? ? else:
? ? ? ? return 0 ? ? ? ? ??
new_sum = sum(10)
print(new_sum)
#output
55

求階乘:n!=1x2x3…xn

def factorial(n):
? ? if n == 1:
? ? ? ? return 1
? ? else:
? ? ? ? return n*factorial(n-1)
new_sum = factorial(5)
print(new_sum)
#output
120

使用遞歸函數(shù)需要注意遞歸次數(shù)默認限制為1000,如果遞歸次數(shù)較多會導(dǎo)致棧溢出的問題

比如

def sum(n):
? ? if n > 0:
? ? ? ? return 1+sum(n-1) ?
? ? else:
? ? ? ? return 0
new_sum = sum(1000)
print(new_sum)

會報RecursionError: maximum recursion depth exceeded in comparison的錯誤

解決問題的辦法是修改可遞歸的次數(shù)

import sys
sys.setrecursionlimit(1500)#可遞歸次數(shù)修改為1500
def sum(n):
? ? if n > 0:
? ? ? ? return 1+sum(n-1) ?
? ? else:
? ? ? ? return 0
new_sum = sum(1000)
print(new_sum)
#output
1000

修改遞歸次數(shù)時需要注意,修改可遞歸次數(shù)為1500,遞歸深度到不了1500,在1400左右。默認可遞歸次數(shù)為1000,遞歸深度也到不了1000,到992左右

如何控制遞歸的次數(shù)

經(jīng)常會用到遞歸,雖然能解決很多問題,但其缺點很明顯,有可能無法跳出造成死循環(huán),能控制遞歸次數(shù)就可以避免這種情況。

用lua嘗試了幾種方法,

第一種

在方法內(nèi)定義一個變量計數(shù):

function recursionTest()
? ? local times = 0
? ? if times < 10 then
? ? ? ? times = times + 1
? ? ? ? recursionTest()
? ? end
? ? if times == 0 then
? ? ? ? print("outer round")
? ? end
end

執(zhí)行下來,是無法限制的,因為局部變量每次都會重置為0。

第二種

local recurTimes = 0
function recursionTest2()
? ? if recurTimes < 10 then
? ? ? ? recurTimes = recurTimes + 1
? ? ? ? recursionTest2()
? ? end
end

這種方法可以控制次數(shù),但是變量需要定義在方法體外,執(zhí)行函數(shù)前都需要先把這個變量設(shè)為0,需要在遞歸方法外包一層,比較繁瑣。

第三種

function recursion(str, t)
? ? str = str or "first time "
? ? t = t or 0
? ? t = t + 1
? ? print(str, t)
? ? if t < 10 then
? ? ? ? recursion("times:", t)
? ? end
? ? if t == 1 then
? ? ? ? print("outer round")
? ? end
end

在遞歸時傳入一個自增變量,達到閾值時停止遞歸,執(zhí)行最外層時無需傳參,默認值為0,且可根據(jù)t的值判斷當(dāng)前的遞歸層數(shù),可以在遞歸結(jié)束時,在最外層執(zhí)行完之前做其他事情,一舉兩得。 

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python開發(fā)微信服務(wù)號消息推送示例

    python開發(fā)微信服務(wù)號消息推送示例

    這篇文章主要為大家介紹了python開發(fā)微信服務(wù)號消息推送示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • Python?列表(list)的常用方法

    Python?列表(list)的常用方法

    這篇文章主要介紹了Python?列表(list)的常用方法,這節(jié)主要講列表,列表用于存儲任意數(shù)目、任意類型的數(shù)據(jù)集合,本文通過示例代碼給大家詳細講解,需要的朋友可以參考下
    2023-05-05
  • Python pkg_resources模塊動態(tài)加載插件實例分析

    Python pkg_resources模塊動態(tài)加載插件實例分析

    當(dāng)編寫應(yīng)用軟件時,我們通常希望程序具有一定的擴展性,額外的功能——甚至所有非核心的功能,都能通過插件實現(xiàn),具有可插拔性。特別是使用 Python 編寫的程序,由于語言本身的動態(tài)特性,為我們的插件方案提供了很多種實現(xiàn)方式
    2022-08-08
  • python中Lambda表達式詳解

    python中Lambda表達式詳解

    在本篇文章里小編給大家整理的是關(guān)于python中Lambda表達式的相關(guān)知識點內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2019-11-11
  • 淺談python str.format與制表符\t關(guān)于中文對齊的細節(jié)問題

    淺談python str.format與制表符\t關(guān)于中文對齊的細節(jié)問題

    今天小編就為大家分享一篇淺談python str.format與制表符\t關(guān)于中文對齊的細節(jié)問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python利用matplotlib繪制約數(shù)個數(shù)統(tǒng)計圖示例

    Python利用matplotlib繪制約數(shù)個數(shù)統(tǒng)計圖示例

    這篇文章主要介紹了Python利用matplotlib繪制約數(shù)個數(shù)統(tǒng)計圖,結(jié)合實例形式詳細分析了Python使用matplotlib進行統(tǒng)計圖繪制的相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • Python裝飾器用法示例小結(jié)

    Python裝飾器用法示例小結(jié)

    這篇文章主要介紹了Python裝飾器用法,結(jié)合實例形式總結(jié)分析了Python裝飾器的簡單使用方法與操作注意事項,需要的朋友可以參考下
    2018-02-02
  • python實現(xiàn)不同數(shù)據(jù)庫間數(shù)據(jù)同步功能

    python實現(xiàn)不同數(shù)據(jù)庫間數(shù)據(jù)同步功能

    這篇文章主要介紹了python實現(xiàn)不同數(shù)據(jù)庫間數(shù)據(jù)同步功能,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • python使用selenium打開chrome瀏覽器時帶用戶登錄信息實現(xiàn)過程詳解

    python使用selenium打開chrome瀏覽器時帶用戶登錄信息實現(xiàn)過程詳解

    這篇文章主要介紹了python使用selenium打開chrome瀏覽器時帶用戶登錄信息,本文以實例給大家來展示如何讓selenium在打開chrome瀏覽器的時候帶上用戶的登錄信息,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • Python練習(xí)之操作SQLite數(shù)據(jù)庫

    Python練習(xí)之操作SQLite數(shù)據(jù)庫

    這篇文章主要介紹了Python練習(xí)之操作SQLite數(shù)據(jù)庫,主要通過三個問題如何創(chuàng)建SQLite數(shù)據(jù)庫?如何向SQLite表中插入數(shù)據(jù)?如何查詢SQLite表中的數(shù)據(jù)?展開文章主題詳情,需要的朋友可以參考一下
    2022-06-06

最新評論