遞迴 遞迴的優化

2021-08-21 17:21:06 字數 1253 閱讀 1852

遞迴演算法在工作或者各種資料結構中使用比較頻繁,遞迴演算法的簡化常見有自頂向下還有備忘錄法

自頂向下:

#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 函式呼叫自身,稱為遞迴。如果尾呼叫自身,就稱為尾遞迴。遞迴非常耗費記憶體,因為需要同時儲存成千...