1️⃣ 定义阶乘函数
阶乘可以用递归或 reduce 实现:
func factorial(_ n: Int) -> Int {
guard n > 1 else { return 1 }
return (1...n).reduce(1, *) // 1*2*3*...*n
}
reduce(1, *)会把序列1...n的元素相乘- 避免了显式循环,更函数式
2️⃣ 定义主函数
使用 map 将输入数组中的每个元素映射为它的阶乘:
func factorialArray(of numbers: [Int]) -> [Int] {
return numbers.map { factorial($0) }
}
3️⃣ 测试
let nums = [1, 2, 3, 4, 5]
let result = factorialArray(of: nums)
print(result) // [1, 2, 6, 24, 120]
[1!, 2!, 3!, 4!, 5!]对应[1, 2, 6, 24, 120]✅
4️⃣ 完整函数式写法(不用额外函数)
如果你想更纯粹的函数式风格,也可以直接在 map 内用 reduce:
let nums = [1, 2, 3, 4, 5]
let factorials = nums.map { n in (1...max(n, 1)).reduce(1, *) }
print(factorials) // [1, 2, 6, 24, 120]
- 这里直接把阶乘逻辑写在闭包中
- 避免了单独函数定义
max(n, 1)保证0也返回1