Вот мое предложение. Работает в Mathematica, работает нормально:
gen[f_, n_] := Module[{id = -1, val = Table[Null, {n}], visit},
visit[k_] := Module[{t},
id++; If[k != 0, val[[k]] = id];
If[id == n, f[val]];
Do[If[val[[t]] == Null, visit[t]], {t, 1, n}];
id--; val[[k]] = Null;];
visit[0];
]
Factorial[n_] := Module[{res=0}, gen[res++&, n]; res]
Обновление Хорошо, вот как это работает: функция посещения из книги Алгоритмов Седжвика, она «посещает» все перестановки длины n. При посещении он вызывает функцию f с перестановкой в качестве аргумента.
Итак, Factorial перечисляет все перестановки длины n, и для каждой перестановки счетчик res увеличивается, таким образом вычисляя n! в O (n + 1)! время.
Почему бы просто не использовать это,
public void removeSelectedFromTable(JTable from)
{
int[] rows = from.getSelectedRows();
TableModel tm = (DefaultTableModel) from.getModel();
for (int row : rows) {
tm.removeRow(from.convertRowIndexToModel(row));
}
from.clearSelection();
}