參考相關
遞推是按照一定的規律來計算序列中的每個項,通常是通過計算前面的一些項來得出序列中的指定項的值。其思想是把乙個複雜的龐大的計算過程轉化為簡單過程的多次重複,該演算法利用了計算機速度快和不知疲倦的機器特點。
遞推演算法是一種簡單的演算法,即通過已知條件,利用特定關係得出中間推論,直至得到結果的演算法。遞推演算法分為順推和逆推兩種。
給定乙個數的序列h0,h1,…,hn,…若存在整數n0,使當n>n0時,可以用等號(或大於號、小於號)將hn與其前面的某些項hi(0遞推是從已有(已知)的資料(初時條件)出發,根據某種遞推關係,逐步推出中間結果,推出最後結果。從已知條件出發,推算出要求的解叫順推。所謂順推法是從已知條件出發,逐步推算出要解決的問題的方法叫順推。
如斐波拉契數列,設它的函式為f(n),已知f(1)=1,f(2)=1;f(n)=f(n-2)+f(n-1)(n>=3,n∈n)。則我們通過順推可以知道,f(3)=f(1)+f(2)=2,f(4)=f(2)+f(3)=3……直至我們要求的解。
所謂逆推法從已知問題的結果出發,用迭代表示式逐步推算出問題的開始的條件,即順推法的逆過程,稱為逆推。逆推則從已知到的結果出發,逐步推出問題的開始條件。
相對於遞迴演算法,遞推演算法免除了資料進出棧的過程,也就是說,不需要函式不斷的向邊界值靠攏,而直接從邊界出發,直到求出函式值.遞推和遞迴很相似,一般他們兩個可以相互轉換。比如階乘函式:f(n)=n*f(n-1)
在f(3)的運算過程中,遞迴的資料流動過程如下:
f(3)–>f(2)–>f(1)–>f(0)–>f(1)–>f(2)–f(3)
而遞推如下:
f(0)–>f(1)–>f(2)–>f(3)
由此可見,遞推的效率要高一些,在可能的情況下應盡量使用遞推.但是遞迴作為比較基礎的演算法,它的作用不能忽視.所以,在把握這兩種演算法的時候應該特別注意。
使用遞迴時,如果遞迴深度太深可能會導致棧溢位問題。
題目請看:
遞推演算法:
演算法–遞推策略:
【資料結構與演算法】目錄
方法 方法呼叫
概念 就是將乙個功能抽取出來,把 單獨定義在乙個大括號內,形成乙個單獨的功能。當我們需要這個功能的時候,就可以去呼叫。這樣即實現了 的復用性,也解決了 冗餘的現象。定義方法的格式 修飾符 返回值型別 方法名 引數列表 方法體 return 定義格式解釋 簡單的方法格式 public static v...
Python魔法方法 基本的魔法方法
new cls 1.new 是在乙個物件例項化時候所呼叫的第乙個方法 2.他的第乙個引數是這個類,其他的引數是用來直接傳遞給 init 方法 3.new 決定是否使用該 init 方法,因為.new 可以直接呼叫其他類的構造方法,或者返回別的例項物件來作為本類的例項,如果 new 沒有返回例項物件,...
方法 方法過載 方法重寫
方法 就是將乙個功能抽取出來,把 單獨定義在乙個大括號內,形成乙個單獨的功能,當我們需要這個方法的時候就可以去呼叫,這樣就實現了 的復用性 方法就是完成特定功能的 塊 方法的定義格式 修飾符 返回值型別 方法名 引數型別1 引數名2,引數型別2 引數名2 格式解釋說明 1.修飾符 public st...