標籤:span binary 其他 hang 一個 通過 遍曆 條件 效率
遞迴函式:
在函數內部,可以調用其他函數。如果一個函數在內部調用自身本身,這個函數就是遞迴函式。
例:
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-遞迴函式,嵌套函數