遞迴是一種**簡潔實現簡單的但效率不太高的處理重複計算的方法。效率不高是因為耗記憶體,耗記憶體是回溯時的重複計算,每次函式呼叫時引數的進棧出棧。所以,提高遞迴效率的方法就是減少重複計算。最簡單的就是儲存之前計算的結果。
舉例說明,這是個常見的面試題:
對於乙個遞迴函式w(a,b,c) 如果a< =0 or b< =0 or c< =0就返回值1. 如果a> 20 or b> 20 or c> 20就返回w(20,20,20) 如果a< b並且b< c 就返回w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c) 其它別的情況就返回w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1)。
實現也很簡單,但如果直接遞迴,要花費時間很長。當加上陣列儲存後,效率一下就提高了。
int f[a][b][c];
int w(int a, int b, int c)
{ if(a <= 0 || b <= 0 || c <= 0) return 1;
if(a > 20 || b > 20 || c > 20) return w(20, 20, 20);
if(f[a][b][c] != -1) return f[a][b][c];
if(a
另乙個例子說明:
js高效組合演算法(遞迴)
當在使用sku商品選擇實現的過程中,發現獲取潛在sku需要用到組合演算法 很多人用的01位移法則,我個人覺得不好,下面是我選擇方法 假如乙個單品的引數組合是 a b c d 當成乙個陣列a 4 a b,c,d 用c 4,m 表示從這4個數中選擇m個數,求其所有的情況。首先要明確,求一組數的組合問題,...
遞迴樹處理
原貼 表中有兩個字段 子 父 a null b a c b d c e c 我的目的是 怎樣根據乙個父級條件,就把包括父級在內的所有子級查詢出來?比如 父級條件是 b 結果應該是 子 父 b a c b d c e c 父級條件是 c 結果應該是 子 父 c b d c e c 注意 子級數沒有限制...
Redis 高效的快取處理
redis作為現在最流行的快取技術,把接收到的資料,轉換為硬碟資料或者資料庫,儲存在快取中,減少多重資料同時的壓力,也可以實現單點,主要作為快取 1.先分享一些配置pom.xml dependency groupid org.springframework.data groupid artifact...