重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
def Sum(m): #函數返回兩個值:遞歸次數,所求的值 if m==1:return 1,m return 1+Sum(m-1)[0],m+Sum(m-1)[1]cishu=Sum(10)[0] print cishu def Sum(m,n=1): ... if m==1:return n,m ... return n,m+Sum(m-1,n+1)[1] print Sum(10)[0] 10 print Sum(5)[0] 5
站在用戶的角度思考問題,與客戶深入溝通,找到嘉禾網站設計與嘉禾網站推廣的解決方案,憑借多年的經驗,讓設計與互聯網技術結合,創造個性化、用戶體驗好的作品,建站類型包括:網站設計制作、成都做網站、企業官網、英文網站、手機端網站、網站推廣、域名與空間、虛擬空間、企業郵箱。業務覆蓋嘉禾地區。
一、使用遞歸的背景
先來看一個??接口結構:
這個孩子,他是一個列表,下面有6個元素
展開children下第一個元素[0]看看:
發現[0]除了包含一些字段信息,還包含了 children 這個字段(喜當爹),同時這個children下包含了2個元素:
展開他的第一個元素,不出所料,也含有children字段(人均有娃)
可以理解為children是個對象,他包含了一些屬性,特別的是其中有一個屬性與父級children是一模一樣的,他包含父級children所有的屬性。
比如每個children都包含了一個name字段,我們要拿到所有children里name字段的值,這時候就要用到遞歸啦~
二、find_children.py
拆分理解:
1.首先import requests庫,用它請求并獲取接口返回的數據
2.若children以上還有很多層級,可以縮小數據范圍,定位到children的上一層級
3.來看看定義的函數
我們的函數調用:find_children(node_f, 'children')
其中,node_f:json字段
??? children:遞歸對象
?以下這段是實現遞歸的核心:
?? if items['children']:
?items['children']不為None,表示該元素下的children字段還有子類數據值,此時滿足if條件,可理解為 if 1。
?items['children']為None,表示該元素下children值為None,沒有后續可遞歸值,此時不滿足if條件,可理解為 if 0,不會再執行if下的語句(不會再遞歸)。
至此,每一層級中children的name以及下一層級children的name就都取出來了
希望到這里能幫助大家理解遞歸的思路,以后根據這個模板直接套用就行
(晚安啦~)
源碼參考:
遞歸式方法可以被用于解決很多的計算機科學問題,因此它是計算機科學中十分重要的一個概念。
絕大多數編程語言支持函數的自調用,在這些語言中函數可以通過調用自身來進行遞歸。計算理論可以證明遞歸的作用可以完全取代循環,因此在很多函數編程語言(如Scheme)中習慣用遞歸來實現循環。
計算機科學家尼克勞斯·維爾特如此描述遞歸:
遞歸的強大之處在于它允許用戶用有限的語句描述無限的對象。因此,在計算機科學中,遞歸可以被用來描述無限步的運算,盡管描述運算的程序是有限的。
python 2 遞歸函數和其它語言,基本沒有差別,只是不支持尾遞歸。無限遞歸最大值為固定的,但可以修改。
作者:黃哥