package main
import ("fmt")
func fibonacci() func(int) int {
pre_pre, pre := 1, 1;
return func(x int) int {
if x == 0 || x == 1 {
return pre
} else {
tmp := pre_pre + pre
//第一种
//pre_pre = pre
//pre = tmp
//第二种
//pre_pre, pre = pre, tmp
//第三种
pre, pre_pre = tmp, pre
return tmp
}
}
}
func main() {
f := fibonacci()
for i := 0; i < 10; i++ {
fmt.Println(f(i))
}
}
用迭代输出斐波那契数列,在迭代数列中两个前置数的时候,我用了3种方法:
注释中的第一种,最常见的。
注释中的第二种和第三种,用了go的多重赋值的特性。
关键是:第二种第三种都能正确输出数列。
这我就纳闷了,这个多重赋值的执行顺序到底是怎样的?它是怎么正确解析出我的赋值步骤的(即第一种里面的步骤)?
执行顺序从左到右,但左边被赋值的变量在表达式的下一行才生效。
即
a, b = b, a+1
可理解成更多例子 https://golang.org/ref/spec#A...