dinamik döngü yuvalama için seviyesini ayarlamak mümkündür

5 Cevap php

Ben gibi permütasyonlarını almak için bir algoritma dışarı çalışıyorum

123
132
213
231
312
321

Ben iç içe foreach döngüleri kullanarak yapıyorum.

for (..) {
    for(..) {
        for(..) {
           echo $i . $j . $k . "<br />";
        }   
    }
}

Sorun iç içe döngüler bu # 3-nokta permütasyon için optimize edilmiş olduğunu. How can I could I dynamically set the number of nested for loops to generate 4-letter or 5-letter permutations?

5 Cevap

Evet, özyinelemeli bunu.

function permuteThis($items, $permutations = array()) {

    if(!is_array($items))
        $items = str_split($items);

    $numItems = sizeof($items);

    if($numItems > 0) {
        $cnt = $numItems - 1;
        for($i = $cnt; $i >= 0; --$i) {
            $newItems   = $items;
            $newPerms   = $permutations;
            list($tmp)  = array_splice($newItems, $i, 1);
            array_unshift($newPerms, $tmp);
            permuteThis($newItems, $newPerms);
        }
    } else {
        echo join('', $permutations) . "\n";
    }
}

$number = 123;
permuteThis($number);

Hayır, hayır, permütasyon üretmek için özyineleme kullanmayın lütfen. Özetlenen algoritması kullanarak here, ayrıca bkz php implementation

Cevap: Bir özyinelemeli işlevini kullanın.

Tekrarlamalı bir fonksiyon kullanabilirsiniz. Bu bir göz atın post.