python-遞歸函數,嵌套函數
阿新 • • 發佈:2018-03-26
pytho 規模 binary 回溯 作用 family strong while 直接
(1)數據的定義是按遞歸定義的。(Fibonacci函數)
(2)問題解法按遞歸算法實現。(回溯)
(3)數據的結構形式是按遞歸定義的。(樹的遍歷,圖的搜索)
遞歸函數:
在函數內部,可以調用其他函數。如果一個函數在內部調用自身本身,這個函數就是遞歸函數。
例:
def calc(n): print(n) if int(n/2) ==0: return n return calc(int(n/2)) calc(10)
案例:二分查找
def BinarySearch(1,key): low = 0 high = len(1)-1 i = 0 while (low <= high) i = i+1 mid = (high + low)/2 if(1[mid] < key): low = mid + 1 elif (1[mid] > key): high = mid - 1 else: print(‘use %d time(s)‘ % i) return mid return -1
遞歸特性:
必須有一個明確的結束條件每次進入更深一層遞歸時,問題規模相比上次遞歸都應有所減少遞歸效率不高,遞歸層次過多會導致棧溢出(在計算機中,函數調用是通過棧(stack)這種數據結構實現的,每當進入一個函數調用,棧就會加一層棧幀,每當函數返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞歸調用的次數過多,會導致棧溢出)。
遞歸的作用:
遞歸做為一種算法在程序設計語言中廣泛應用.是指函數/過程/子程序在運行過程序中直接或間接調用自身而產生的重入現象.
遞歸是一個函數在其定義中又直接或間接調用自身的一種方法,它通常把一個大型復雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復計算,大大地減少了程序的代碼量。遞歸的能力在於用有限的語句來定義對象的無限集合。用遞歸思想寫出的程序往往十分簡潔易懂。
一般來說,遞歸需要有邊界條件、遞歸前進段和遞歸返回段。當邊界條件不滿足時,遞歸前進;當邊界條件滿足時,遞歸返回。
註意:
(1) 遞歸就是在過程或函數裏調用自身;
(2) 在使用遞歸策略時,必須有一個明確的遞歸結束條件,稱為遞歸出口。
遞歸算法一般用於解決三類問題:
(1)數據的定義是按遞歸定義的。(Fibonacci函數)
(2)問題解法按遞歸算法實現。(回溯)
(3)數據的結構形式是按遞歸定義的。(樹的遍歷,圖的搜索)
嵌套函數:
name = "yue" def change_name(): name = "yueyue" def change_name2(): name = "yueyueyue" print("打印",name) change_name2() #調用內層函數 print("打印",name) change_name() print("打印",name)
這個就叫做嵌套調用,它是一個語言提供的程序設計的方法,也就是語言的特性。
python-遞歸函數,嵌套函數