私はこの問題を抱えています。 時刻tに基づいて数値xを計算する必要があります。xはM(t)で表されます。 我々有する以下Javascript - 再帰呼び出しの代わりに
- M(0)= 1
- M(1)= 1
- M(2)= 2
- M(2T)= M(T)+ M( T + 1)+ T(Tのために> 1)
- M(2T + 1)= M(T - 1)+ M(T)+ 1(すなわち有するT> = 1)
用私がこれを実装するのを忘れていた最初のことは、再帰を使用することであると言われています
function CalculateForTime(t) {
if (t == 0 || t == 1) {
return 1;
}
else if (t == 2) {
return 2;
}
else if (t % 2 == 0) {
t = t/2;
return CalculateForTime(t) + CalculateForTime(t + 1) + t;
}
else {
t = (t - 1)/2;
return CalculateForTime(t - 1) + CalculateForTime(t) + 1;
}
}
これは、例えば、多数tに1^20
を実行しているときしかし、それは私が末尾呼び出しの再帰に探したり、反復的なアプローチに再帰的なアプローチを代入しようとしたが、実際にそれを理解できなかった破る作品でる。
テール再帰または繰り返しが次に進む方法であれば、私はこれを変換する際に助けが必要です。そうでなければ、私はこれをより最適化するためのさまざまな方法を公開しています。
ありがとう、 オマール。
から答え、OPは、アルゴリズムhttps://addyosmani.com/blog/からのキャッシングの詳細を隠すためにmemoizingデコレータになっているはずですより速いjavascript-memoization/ –
ありがとう、それは完璧に働いた。 –