如何在不使用 Swift 语言中的内置函数的情况下计算整数的平方根?我尝试了下面的代码并搜索,但没有更好的解决方案



只是一个练习:

func mySqrt(_ x: Int) -> Int {
if x<2 { return x }

var y = x
var z = (y + (x/y)) / 2
while Double(abs(y - z)) >= 0.00001 {
y = z
z = (y + (x/y)) / 2
}

return z
}

我在StackOverflow中浏览了许多答案,但没有找到更好的解决方案,例如

在ios, Objective C和Swift中计算任何数字平方根的最佳方法

找到平方根而不使用sqrt函数?

输入x = 4或任何完全平方,它工作得很好。现在,以x = 8, It Time out为例。

请告诉我,我做错了什么。

问题是你试图在所有的计算中使用整数。

8的平方根不是整数。您需要对所有变量使用Double(除了可选地将parameter保留为Int)。如果你想要一个有意义的答案,返回值需要是一个Double

下面是你在需要的地方使用Double的代码:

func mySqrt(_ x: Int) -> Double {
if x < 2 { return Double(x) }
var y = Double(x)
var z = (y + (Double(x)/y)) / 2
while (abs(y - z)) >= 0.00001 {
y = z
z = (y + (Double(x)/y)) / 2
}
return z
}
print(mySqrt(8))

给出正确的结果。

最新更新