Я тестировал рекурсивную функцию на производительность.
В строке 33 я создаю массив с 50000 элементов в нем; каждый элемент в массиве имеет значение Int между 1 и 30.
Тест завершается ошибкой, когда количество элементов в массиве приблизительно> 37500.
Я не совсем уверен, что это за кр sh из-за, но я предполагаю, что это из-за переполнения стека? Это на самом деле из-за потока стека? Учитывая то, что я делаю / этот контекст - нормально ли ожидать здесь переполнение стека?
Для вашего удобства ниже приведен код:
let arr = (1...50000).map { _ in Int.random(in: 1...30) }
func getBuildingsWithView(_ buildings: [Int]) -> [Int]? {
if buildings.isEmpty { return nil }
let count: Int = buildings.count - 1
var indices: [Int] = []
let largest: Int = 0
var buildings = buildings
hasView(&buildings, &indices, largest, count)
return indices
}
func hasView(_ buildings: inout [Int], _ indices: inout [Int], _ largest: Int, _ count: Int) {
if count > 0 {
var largest = largest
if (buildings[count] > largest) {
largest = buildings[count]
}
hasView(&buildings, &indices, largest, count-1)
}
if (buildings[count] > largest) {
indices.append(count)
}
}
func test1() {
print("-----------------TEST START - RECURSION------------------")
measure {
print(getBuildingsWithView(arr)!)
}
print("-----------------END------------------")
}