1、遞歸函數算法
概念:遞歸算法是一種直接或者間接的調用自身算法的過程。在計算機編寫程序中,遞歸算法對解決一大類問題是十分有效的。
函數
特色:spa
①遞歸就是在過程或者函數裏調用自身。
設計
②在使用遞歸策略時,必須有一個明確的遞歸條件,稱爲遞歸出口。code
③遞歸算法解題一般顯得很簡潔,但遞歸算法解題的效率較低。因此通常不倡導使用遞歸算法設計程序。blog
④在遞歸調用的過程中系統的每一層的返回點、局部變量等開闢了棧來存儲。遞歸函數次數過多容易形成棧溢出等。
遞歸
因此通常不倡導用遞歸算法設計程序。ci
要求:class
遞歸算法所體現的"重複"通常有三個條件:效率
①每次在調用規模上都有所縮小(一般是減半)。
②相鄰兩次重複之間有緊密的聯繫,前一次要爲後一次作準備(一般前一次的輸出就做爲後一次的輸入)。
③在問題的規模極小時必須用直接接觸解答而再也不進行遞歸調用,於是每次遞歸調用都是有條件的(以規模未達到直接解答的大小爲條件),
無條件的遞歸調用將會成爲死循環而不能正常結束。
1 """非遞歸方式呈現""" 2 sum = 0 3 for obj in range(1,101): 4 sum+=obj 5 print sum 6 7 """"1+2+3+...+100""" 8 def foo(n): 9 if n>0:return n+foo(n-1) 10 if n<=0:return 0 11 print foo(100) 12 13 """階乘""" 14 def fac(n): 15 if n==0 or n==1: 16 return 1 17 else: 18 return n*fac(n-1) 19 print fac(10)
遞歸算法通常用於解決三類問題:(1)數據的定義是按遞歸定義的。(好比Fibonacci函數)(2)問題解法按遞歸算法實現。(回溯)(3)數據的結構形式是按遞歸定義的。(好比樹的遍歷,圖的搜索,二分法查找等)