将函数作为for循环条件的一部分调用是否可以?

时间:2018-06-01 17:29:42

标签: go

以下是https://tour.golang.org/flowcontrol/8解决此练习的两次尝试。一个版本将函数调用作为for条件的一部分,但这不起作用 - 它甚至不执行循环体。如果我在循环内移动条件,它就像我预期的那样工作。为什么呢?

package main

import (
    "fmt"
    "math"
)

func Sqrt_working(x float64) float64 {
    var z float64 = 1.0

    for {
        if math.Abs((z*z) - x) < 0.0001 {
            break
        }
        z -= ((z*z - x) / (2*z))
    }

    return z
}

func Sqrt_not_working(x float64) float64 {
    var z float64 = 1.0

    for math.Abs((z*z) - x) < 0.0001 {
        z -= ((z*z - x) / (2*z))
    }

    return z
}

func main() {
    fmt.Println(Sqrt_working(2))
    fmt.Println(Sqrt_not_working(2))
}

输出

1.4142156862745099
1

1 个答案:

答案 0 :(得分:5)

当循环停止时,if条件正在发出信号,但当循环继续时,for条件会发出信号。

要查看所需结果,请反转for条件:

for math.Abs((z*z) - x) >= 0.0001 {
    z -= ((z*z - x) / (2*z))
}