ホームページ >バックエンド開発 >PHPチュートリアル >PHP の完全に配置された再帰アルゴリズム コード

PHP の完全に配置された再帰アルゴリズム コード

WBOY
WBOYオリジナル
2016-07-25 09:03:27948ブラウズ
  1. function Rank($base, $temp=null)
  2. {
  3. $len = strlen($base);
  4. if($len <= 1)
  5. {
  6. echo $temp. $base.'
    ';
  7. }
  8. else
  9. {
  10. for($i=0; $i< $len; ++$i)
  11. {
  12. rank(substr($base, 0, $ i).substr($base, $i+1, $len-$i-1), $temp.$base[$i]);
  13. }
  14. }
  15. }
  16. rank('123');
  17. ?> ;
コードをコピー

しかし、結果を何度もテストした結果、同じ要素がある場合、配置全体が繰り返されるという問題があることがわかりました。 たとえば、「122」には「122」、「212」、「221」の 3 つの配置しかありませんが、上記の方法が繰り返されます。 わずかな変更を加え、重複を識別するためのフラグを追加すると、問題は解決されます。

  1. function fsRank($base, $temp=null)
  2. {
  3. static $ret = array();
  4. $len = strlen($base);
  5. if($len < = 1)
  6. {
  7. //echo $temp.$base.'
    ';
  8. $ret[] = $temp.$base;
  9. }
  10. else
  11. {
  12. for($i=0; $i{
  13. $had_flag = false;
  14. for($j{
  15. if($base[$i] = = $base[$j])
  16. {
  17. $had_flag = true;
  18. break;
  19. }
  20. }
  21. if($had_flag)
  22. {
  23. Continue;
  24. }
  25. fsRank(substr($base, 0, $i). substr($base, $i+1, $len-$i-1), $temp.$base[$i]);
  26. }
  27. }
  28. return $ret;
  29. }
  30. print '
    '; </li>
    <li>print_r(fsRank('122'));</li>
    <li>print '
    ';
  31. ?>
コードをコピー
全配列の再帰アルゴリズムを紹介します。PHP配列の非再帰アルゴリズムの実装コードを紹介します。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。