電子書籍の厳選無料作品が豊富!

例えば1-9までの数字を2つ並べる際の並び替えを
すべて表示させたい場合は

for($i=1;$i<10;$i++){
for($s=1;$s<10;$s++){
print($i.$s."<br>");
}
}

とか書けばいいと思うのですが.

9桁くらいになると上の文字を9個増やすのはなんか
かっこ悪すぎると思います。

そこで再帰的にできるかと思うのですが
コードが思いつきません。

分かる方がおられましたしたら是非教えて頂きたいです。

A 回答 (3件)

自分で書いて、不要なreturnが気になったんで、書き直し。


内容は同じです。

<?php

function combination($n, $i, $s) {
  if($n == 0) {
    echo $s.$i."<br />\n";
  } else {
    for($j = 0; $j < 10;$j++) {
      combination($n - 1, $j, $s.$i);
    }
  }
}

function permutation($n, $a, $s) {
  if($n == 0) {
    echo "{$s}\n";
  } else {
    for($i = 0; $i < count($a); $i++) {
      $p = array_splice($a, $i, 1);
      permutation($n - 1, $a, $s.$p[0]);
      array_splice($a, $i, 0, $p);
    }
  }
}

combination(3, "", "");
permutation(4, range(1,4), "");
?>
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
2度も書き込んで頂き感謝しております。

ありがとうございます!!

お礼日時:2008/05/16 18:26

ご質問のソースだと、順列ではなく組み合わせになっているのでは・・・


<?php

function combination($n, $i, $s) {
if($n == 0) {
echo "{$s}{$i}<br />\n";
} else {
for($j = 0; $j < 10;$j++) {
combination($n - 1, $j, $s.$i);
}
}
}

function permutation($n, $a, $s) {
if($n == 0) {
echo "{$s}<br />\n";
return;
}
for($i = 0; $i < count($a); $i++) {
$p = array_splice($a, $i, 1);
permutation($n - 1, $a, $s.$p[0]);
array_splice($a, $i, 0, $p);
}
}

combination(3, "", "");
permutation(4, range(1,4),"");
?>

combinationは組み合わせ、permutationは順列を出します。
    • good
    • 0

こんな感じですかねぇ。

5桁までしか試してませんが(汗

  <?php
  print digit('' , 5);

  function digit($str, $num) {
    for($i=1; $i<10; $i++){
      if ($num == 1) {
        print $str . $i . "<br />";
      }
      else {
        digit($str . $i, $num-1);
      }
    }
  }
  ?>
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
大変助かりました><

お礼日時:2008/05/16 18:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!