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.