PHPは2つの整数nとmを入力し、数列1,2,3から......nの中で勝手にいくつかの数を取って、それとmに等しくして、その中のすべての可能な組み合わせを列挙することを要求します
6104 ワード
1 <?php
2 # sum n, 1,2...n sum
3 #
4 # f(sum, n) ,
5 #1. sum n, f(sum, n) = f(sum - n, n - 1)
6 #2. sum n, f(sum, n) = f(sum, n - 1)
7 # f(sum, n) = f(sum - n, n - 1) U f(sum, n - 1)
8
9 function combination($sum, $n, $comb) {
10 if ($n < 0 || $sum < 0) {
11 # n < 0 sum < 0
12 // print_r($comb);
13 // echo "sum: {$sum} n: {$n}<br>";
14 return;
15 }
16
17 if ($sum < $n) {
18 combination($sum, $sum, $comb); #sum < n, sum
19 return;
20 }
21
22 #
23 if ($sum == 0) {
24 #
25 echo "Combination: ";
26 foreach ($comb as $val) {
27 echo $val . " ";
28 }
29 echo "<br>";
30 return;
31 }
32
33 # n
34 $comb[] = $n;
35 combination($sum - $n, $n - 1, $comb);
36
37 # n
38 array_pop($comb);
39 combination($sum, $n - 1, $comb);
40 }
41
42 combination(10, 15, array());
43 ?>