如何使用Go计算多次迭代?

时间:2016-06-09 18:35:02

标签: go

所以我有一小段代码可以根据需要进行迭代,直到所寻求的值之间的差异非常糟糕。我希望在代码运行完毕后计算并打印迭代次数,最好是在我的main函数中(以及打印我需要的所有其他内容)。

编辑:好的,我已经设法这样做了。我想知道是否有更简单的方法来计算迭代并将它们传递给输出函数。

func sqrt(x float64) (float64, int) {
    k := 1
    z := 1.0
    q := (z*z - x)/(2*z)
    for {
      if  math.Abs(-q) > 0.001 {
      z -= q
      q = (z*z - x)/(2*z)
      k += 1
      } else {
        break
      }
    }
    return z, k
}

func main() {
    k := 1
    z := 1.0
    z, k = sqrt(9)
    fmt.Println("Your sqrt = ", z)
    fmt.Println("Math Sqrt = ",math.Sqrt(9))
    fmt.Println("Iterations: ", k)
}

2 个答案:

答案 0 :(得分:1)

您可以通过以下功能提供多个返回值:

func main() {
    numLoops, newNum := sqrt(9)
}

func sqrt(x float64) (int, float64) {
    <implementation>
}

GoPlay:https://play.golang.org/p/R2lV41EbEd

答案 1 :(得分:1)

您可以返回浮点值和int(作为迭代次数)。我对你的例子进行了非常小的修改以证明。

func sqrt(x float64) (float64, int) {

    z := 1.0
    i := 1
    q := (z*z - x) / (2 * z)
    for {
        if math.Abs(-q) > 0.01 {
            i++
            z -= q
            q = (z*z - x) / (2 * z)
        } else {
            break
        }
    }
    return z, i
}

func main() {
    f, i := sqrt(9)
    fmt.Printf("result: %f iterations: %d\n", f, i)
    fmt.Println(math.Sqrt(9))
}