从数组中计算最大公约数的有效方法 - Swift

时间:2017-02-04 19:47:48

标签: arrays swift greatest-common-divisor

我创建了以下函数,它将两个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]使用此功能?

2 个答案:

答案 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