0

围棋之旅#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 >= 20and 10

4

1 回答 1

1

正如@larsmans 已经回答的那样,您将第一次调用的限制传递给 10,因此返回的数字是 10 而不是 20。

将其更改为

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

删除该行时,您将看到以下输出return v

27 >= 20
20 20
于 2013-10-10T14:17:19.803 回答