Swift вернуть массив из рекурсивной функции


#1
func permute(_ a: [String], _ i: Int, _ n: Int) -> [String] {
        var arr = [String]()
        var a = a
        if (i == n) {
            print (a)
            return arr
        }

        for j in i..<n {
            a.swapAt(i, j)
            permute(a, i+1, n)
            a.swapAt(i, j)
        }

        return arr
    }
    var a = ["a", "b", "c"]
    print(permute(a, 0, 3))

Моя функция выводит построчно массивы букв (через print):

["a", "b", "c"]
["a", "c", "b"]
["b", "a", "c"]
["b", "c", "a"]
["c", "b", "a"]
["c", "a", "b"]

А сама функция возвращает

[]

А нужно чтобы функция возвращала строки:

["abc", "acb", "bac", "bca", "cab", "cba"]

Основная проблема в том, что я не понимаю как в рекурсивной функции добавлять элементы в массив и возвращать эти элементы.


#2

Возвращает пустой массив, потому что вы возвращаете везде в функции массив arr, который у вас определен как пустой в начале функции, а далее вы работаете только с массивом а, который нигде не возвращаете.


#3
func permutation(arr: [String], prefix: String = "") -> [String] {
    var res = [String]()
    for i in 0..<arr.count {
        var tmp = arr
        let char = tmp.remove(at: i)
        res += permutation(arr: tmp, prefix: prefix + char)
    }
    if arr.isEmpty {
        res.append(prefix)
    }
    return res
}

print(permutation(arr: ["a", "b", "c"]))