我的解法基于教程的内容,也就是还没有到的内容不会出现在我的解法中,并且既然是练习便尽量地使用Go的特性,抛弃自己对其它语言使用的习惯。
习题:http://tour.golang.org/#44
中文资料:http://blog.punkid.org/2008/02/28/compute-the-square-root-via-newtons-iteration/
解法:
package main
import fmt "fmt"
import math "math"
// 找个比较近的值,期望有这个东西能够比较快地找到合适的值。
func guess(seed float64, value float64) float64 {
if seed > value {
return 1
}
var p float64 = 1.0
for v:= seed; v < value; p, v = v, v*seed {}
if p > value {
return 1
}
return p
}
func newtonIterator(start float64) func(float64) float64 {
sqr := start
return func(value float64) float64 {
sqr = sqr - ((sqr*sqr - value)/(2*sqr))
return sqr
}
}
func main() {
var value float64 = 101
sqr_2 := math.Sqrt(value)
start := guess(2, value)
f := newtonIterator(start)
for i := 0; i < 100; i++ {
fmt.Println(f(value) ,":", sqr_2)
}
}
感慨:牛顿太NB了!