Heim >Backend-Entwicklung >PHP-Tutorial >PHP vollständig arrangierter rekursiver Algorithmuscode

PHP vollständig arrangierter rekursiver Algorithmuscode

高洛峰
高洛峰Original
2016-12-01 14:55:481292Durchsuche

Algorithmusprinzip

Wenn P die vollständige Anordnung von n Elementen darstellt und Pi die vollständige Anordnung von n Elementen darstellt, die das Element i nicht enthält, (i) bedeutet Pi das Hinzufügen des Präfixes i vor dem Anordnung Pi, dann kann die Gesamtanordnung von n Elementen rekursiv definiert werden als:
① Wenn n=1, dann hat die Anordnung P nur ein Element i;
Gemäß der Definition kann es sein Man sieht, dass, wenn die Anordnung Pi von (k-1) Elementen erzeugt wurde, die Anordnung von k Elementen erzeugt werden kann, indem man vor jedem Pi das Element i hinzufügt.
Code-Implementierung
Code kopieren Der Code lautet wie folgt:
function rank($base, $temp=null)
{
$len = strlen($base);
if ($len <= 1)
{
echo $temp.$base.'
';
}
else
{
for($i =0; $i< $len;
{
rank(substr($base, 0, $i).substr($base, $i+1, $len-$i- 1), $temp.$base[$i]);
}
}
}
rank('123');

Nach vielen Testläufen ist es jedoch Es wurde festgestellt, dass eine Frage vorliegt: Wenn dieselben Elemente vorhanden sind, wird die gesamte Anordnung wiederholt.
Zum Beispiel gibt es nur drei Situationen für die vollständige Anordnung von „122“: „122“, „212“ und „221“, aber die oben genannten Methoden werden wiederholt.
Leicht geändert, ein Flag zum Erkennen von Duplikaten hinzugefügt, das Problem gelöst (der Code lautet wie folgt):
Kopieren Sie den Code. Der Code lautet wie folgt:
function fsRank($base, $temp=null)
{
static $ret = array();
$len = strlen($base);
if($len <= 1)
{
//echo $ temp.$base.'< ;br/>';
$ret[] = $temp.$base;
}
else
{
for($i=0; $i< $len; + +$i)
                                                                                                                                                                                                                                                                       ( > continue;
}
fsRank(substr($base, 0, $i).substr($base, $i+1, $len-$i-1), $temp.$base[$i ]);
}
}
return $ret ;
}
print '

';<br>print_r(fsRank('122'));<br>print '
';

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn