[ sarcasm ]
А почему вы записали перестановки на бумаге только до 4 символов? Вообще, считаю, что вы рано взялись за код. Надо было бы проверить все это хотя бы до штук 20. Так было бы надёжнее, а то вдруг потребуется записать в файл перестановки для 5 символов, а этот алгоритм уже не подойдёт. Да и нам читать было бы интереснее.[ /sarcasm ]
Код, который вы привели в качестве примера — это просто ад. Он абсолютно нечитаем, не отформатирован и изобилует грязными приемами. За написание такого кода в своем проекте я бы руки оторвал, а уж за использование его в качестве примера для других — и подавно.
Ок, explode вы уже выучили, теперь можно и конструкции
$s='';
foreach($ar as $v) {
$s.='.'.$v;
}
заменить на $s = implode('.', $ar);
Заодно отпадет необходимость отрезать первый символ.
Перестановки массива A, это все варианты сочетаний(конкатенаций) каждого из элементов этого массива X с перестановками массива A`, полученного удалением из массива A элемента X. Если массив А пуст, то перестановок нет.
«Итерация свойственна человеку, рекурсия божественна.» (Л. Питер Дойч)
Но на практике можно упереться в глубину стека вызовов.
Перестановки без формул. (Код PHP)