数え上げ(続き)

9つのものを袋に分ける分け方は何通りあるか?という問題について、「数え上げ理論」本に書いてあったアルゴリズムで、友人がJAVAで書いてくれました。答えは手で数えたものと合っています。とりあえずこのままJ言語に翻訳してみようと思う(予定)。

int p(int m) {
       int sum = 0;
       for (int i=1; i<=m; i++) {
               sum += p(m, i);
       }
       return sum;
}
int p(int m, int n) {
       if (m < n) return 0;
       if (m == n) return 1;
       if (n == 1) return 1;
       // if (m > n)
       int sum = 0;
       for (int i=n; i>=1; i--) {
               sum += p(m - n, i);
       }
       return sum;
}
p(1): 1
p(2): 2
p(3): 3
p(4): 5
p(5): 7
p(6): 11
p(7): 15
p(8): 22
p(9): 30
Execution completed.