- 70 名前:66 mailto:sage [2008/02/08(金) 17:02:37 ]
- がーん、ソース貼られてたw しかも、m=2についても解いてあるし。
>>67 >呼び出し回数は大して減らないって? だから、>54の問題にあるようなキャッシュについてですがな。 m=1について解いてしまえば早くなりましたがな。 癪だから以下に。 -- #include <stdio.h> #include <stdlib.h> // #include <stdbool.h> static int ack(unsigned m, unsigned n) { // static int a[4][16]; // bool inRange = m < sizeof(a) / sizeof(* a) && n < sizeof(* a) / sizeof(** a); int val; // if (inRange && a[m][n] != 0) return a[m][n]; if (m == 0) { val = n + 1; } else if (m == 1) { // short cut for ack(1, n) val = n + 2; // ack(1, n) -> ack(0, ack(1, n-1)) -> ack(1, n-1) + 1 } else if (n == 0) { val = ack(m - 1, 1); } else { val = ack(m - 1, ack(m, n - 1)); } // if (inRange) a[m][n] = val; return val; } コメント部分を生かせばキャッシュされるけど、最早どうでもいいなぁw
|

|