围棋之旅#23:回归奇怪的行为

时间:2013-10-10 13:54:37

标签: go

A Tour of Go #23

package main

import (
    "fmt"
    "math"
)

func pow(x, n, lim float64) float64 {
    if v := math.Pow(x, n); v < lim {
        return v

    } else {
        fmt.Printf("%g >= %g\n", v, lim)
    }
    // can't use v here, though
    return lim
}

func main() {
    fmt.Println(
        pow(3, 2, 10),
        pow(3, 3, 20),
    )
}

结果是:

27 >= 20
9 20

如果我注释掉return v行,则结果为:

27 >= 20
10 20

为什么会发生这种情况?为什么第一次pow()来电的结果不等于27 >= 2010

1 个答案:

答案 0 :(得分:1)

正如@larsmans已经回答的那样,你通过了第一次通话的限制10,因此 返回的数字是10而不是20。

将其更改为

func main() {
    fmt.Println(
        pow(3, 2, 20),
        pow(3, 3, 20),
    )
}

删除return v行后,您会看到以下输出:

27 >= 20
20 20