遞迴演算法在工作或者各種資料結構中使用比較頻繁,遞迴演算法的簡化常見有自頂向下還有備忘錄法
自頂向下:
#t(n) = t1(n) + t2(n) + t3(n) + 25c
#t1(n) = [(r11p1 + r12p2 + r13p3 + r14p4 + r15p5 + r16p6 + r17p7 + r18p8 + r19p9) - t1(n-1)] x tau1 + t1(n-1)
#t2(n) = [(r21p1 + r22p2 + r23p3 + r24p4 + r25p5 + r26p6 + r27p7 + r28p8 + r29p9) - t2(n-1)] x tau2 + t2(n-1)
#t3(n) = [(r31p1 + r32p2 + r33p3 + r34p4 + r35p5 + r36p6 + r37p7 + r38p8 + r39p9) - t3(n-1)] x tau3 + t3(n-1)
#t1(0) = t2(0) = t3(0) = 0
#include#include#include#include#include #define n 10000
signed int arry_p = ;
float arry_prometheus_r1 = ;
float prometheus_tau1 = tau1;
float cal_t1n(int n)
int i = 0;
float arithmetic = 0.0;
float t1n = 0.0;
for(i=0;i} // 首先是簡化遞迴公式
// 其次使用自頂向下比自底向下的效率要高很多
t1n = arithmetic*prometheus_tau1+(1-prometheus_tau1)*cal_t1n(n-1);
return t1n;
}int main()
gettimeofday(&end, null);
timeuse = (1000000 * ( end.tv_sec - start.tv_sec ) + end.tv_usec - start.tv_usec)/1000.0;
printf("time_use is %.2fms\n", timeuse);
printf("t1n is %.3f\n", ret);
return 0;
}
遞迴 遞迴演算法的非遞迴優化
一 遞迴 在方法內部呼叫自身方法的過程稱為遞迴,下面給出乙個遞迴方法的示例。class program 使用遞迴,實現求前n項和 public static int getsum int n int result getsum n 1 在方法體中呼叫方法本身 return result n 需要注意...
遞迴二 遞迴的優化,DP
上課時給學生講到遞迴實現的缺陷時,舉過下面的例子 使用遞迴方法來計算組合數 從m個不同元素中,任取n n m 個元素並成一組,叫做從m個不同元素中取出n個元素的乙個組合 從m個不同元素中取出n n m 個元素的所有組合的個數,叫做從m個不同元素中取出n個元素的組合數。公 式 c m,n n m n ...
普通遞迴與優化遞迴
function factorial n factorial 5 120 上面 是乙個階乘函式,計算n的階乘,最多需要儲存n個呼叫記錄,複雜度 o n 如果改寫成尾遞迴,只保留乙個呼叫記錄,複雜度 o 1 函式呼叫自身,稱為遞迴。如果尾呼叫自身,就稱為尾遞迴。遞迴非常耗費記憶體,因為需要同時儲存成千...