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 ?>