private static int TopDown(int n) { int[] counts = new int[n + 1]; counts[0] = 1; return(TripleStep.TopDown(n, counts)); }
private static int TopDown(int n, int[] counts) { if (n < 0) { return(0); } if (counts[n] == 0) { counts[n] = TripleStep.TopDown(n - 1, counts) + TripleStep.TopDown(n - 2, counts) + TripleStep.TopDown(n - 3, counts); } return(counts[n]); }