我创建了以下函数,它将两个Integers
作为参数并计算它们的GCD:
func getGCD(_ num1: Int, _ num2: Int) -> Int {
let remainder = num1 % num2
if remainder != 0 {
return gcd(num2, remainder)
} else {
return num2
}
}
注意:我想使用Recursivity
。
问题1:有没有办法让这个功能更有效率?
问题2:如何对Array
类型的[Int]
使用此功能?
答案 0 :(得分:2)
一旦函数gcd
(或getGCD
)处理两个整数,以下内容将适用于整数数组arr
:
let result = arr.reduce(0) {gcd($0,$1)}
答案 1 :(得分:1)
首先,您的函数不适用于否定Integers
,因此使其“更有效”的方法是使用abs()
来获取数字的绝对值:< / p>
func gcd(_ a: Int, _ b: Int) -> Int {
let remainder = abs(a) % abs(b)
if remainder != 0 {
return gcd(abs(b), remainder)
} else {
return abs(b)
}
}
第二个问题 - 使用数组:
var numbers = [5,10]
var index = 0
var result = 0
if numbers.isEmpty{result=0}
else if numbers.count == 1{result = numbers[0]}
else{
while index <= numbers.count-1{
if index==0{
result = gcd(numbers[index], numbers[index + 1])
index+=2
}
else {
result = gcd(result,numbers[index])
index+=1
}
}
}
print(result) // prints 5