for i -> (start, end+1)
Это означает итерацию для каждого значения, начиная с start , с автоматическим приращением и условием, удовлетворяющим end + 1
permutation(start+1,end)
Это точно такой же вызов функции со значениями начала и конца, переданными в него
например,
function permutation(start, end)
с началом = 1 и концом = 10
Внутри foreach будет итерация, начиная с 1 с автоинкрементом, до 10, что означает меньше (10 + 1) = 11
Тогда перестановка (начало + 1, конец) называется
Допустим, для первого элемента start = 1. Он будет вызываться с start как 2 и end как 10