Go指南练习之《斐波纳契闭包》
来源:互联网 发布:工期优化步骤 编辑:程序博客网 时间:2024/05/18 19:44
函数的闭包
Go 函数可以是一个闭包。闭包是一个函数值,它引用了其函数体之外的变量。 该函数可以访问并赋予其引用的变量的值,换句话说,该函数被“绑定”在了这些变量上。
例如,函数 adder 返回一个闭包。每个闭包都被绑定在其各自的 sum 变量上。
func adder() func(int) int { sum := 0 return func(x int) int { sum += x return sum }}func main() { pos, neg := adder(), adder() for i := 0; i < 10; i++ { fmt.Println( pos(i), neg(-2*i), ) }}每个函数都自己的sum变量空间,所以pos(i)和neg(-2*i)的sum值是相互独立的,不会被影响
练习:斐波纳契闭包
package mainimport "fmt"/*斐波那契数,亦称之为斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列、费波那西数列、费波拿契数、费氏数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*),用文字来说,就是斐波那契数列列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加。*/func fibonacci1() func() int { back1, back2:= 0, 1 // 预先定义好前两个值 return func() int { //记录(back1)的值 temp:=back1 // 重新赋值(这个就是核心代码) back1,back2=back2,(back1 + back2) //返回temp return temp }}func main() { f := fibonacci1()// 返回一个闭包函数 for i := 0; i < 10; i++ { // 检测下前10个值 fmt.Println(f()) }}
原文:http://blog.csdn.net/qq_27818541/article/details/54347998
阅读全文
0 0
- Go指南练习之《斐波纳契闭包》
- Go指南练习之《斐波纳契闭包》
- Go指南练习之《slice》
- Go指南练习之《map》
- Go指南练习之《Stringers》
- Go指南练习之《错误》
- Go指南练习之《Reader》
- Go指南练习之《rot13Reader》
- Go指南练习之《图片》
- Go指南练习之《循环和函数》
- Go指南练习之《HTTP 处理》
- Go指南练习之《等价二叉树》
- Go指南练习之《Web 爬虫》
- Go指南中的练习:map
- Go指南中的练习:Stringers
- go语言指南的练习
- Go指南—练习:rot13Reader
- go指南练习:循环和函数
- 《JS高级程序设计》第6章读书笔记:创建对象(一)之工场模式和构造函数模式
- 成为JavaGC专家(2)—如何监控Java垃圾回收机制
- SurfaceView的概念和优点及使用
- 小小粉丝度度熊--尺取法、合并一些重复的区间。
- Android.mk简单分析
- Go指南练习之《斐波纳契闭包》
- Maven+Spring构建Demo
- HBase开启Snappy压缩
- Session&Cookie&token
- 【HDU】 2063 过山车
- 普通蔬菜辨营养
- 构造函数与普通 函数的区别
- for(a b:c){} 是什麽意思?
- ecliplse 安装svn