<script>
var arr = ['A','B','C','D','E'];
var x = 0;
function fn(e, k) {
    for (var f = [], c = e.length, g = 0;; g++) {
        var b = g.toString(c);
        if (b.length > k) break;
        b = [...b.padStart(k,"0")].reduce((a,d) => {
        	x++;
        	return (d = parseInt(d, c), a + e[d]);
        },"");
        f.push(b);
    }
    console.log(x);
    return f;
}
document.write(fn(arr, 4).join('<br>'));
</script>
Рони, не многовато ли итераций??
 как то можно ведь оптимизировать?