Golang利用select和普通函数分别实现斐波那契数列
//斐波那契数列
//1 1 2 3 5 8
//观察规律
//第一轮:前两个数是1,1,相加等于2
//第二轮:第二个数和第三个数是1,2,相加等于3
//第三轮:第三个数和第四个数是2,3,相加等于5
//第四轮:第四个数和第五个数是3,5,相加等于8
//也就是说两个数相加的和,和前面的数相加 package main import (
"fmt"
) //ch只写,quit只读
func fibonacci(ch chan<- int, quit <-chan bool) {
x, y := ,
for {
//监听channel数据的流动
select {
case ch <- x: //往里写 。第一次写的时候是1,如果没有地方读的话,那么这里会阻塞
x, y = y, x+y //第一次是往ch写1,y的值也是1,下一次y的值就是x+y
case flag := <-quit: //读
fmt.Println("flag = ", flag)
return
}
}
} func main() {
ch := make(chan int) //数字通道
quit := make(chan bool) //程序是否结束 //消费者,从channel读取内容
//新建协程
go func() {
for i := ; i < ; i++ {
num := <-ch //这里读是因为防止select那里会阻塞
fmt.Println(num)
}
//可以停止
quit <- true
}() //别忘了() //生产者,产生数字,写入channel
fibonacci(ch, quit) }
flag = true
上面是使用select,下面用普通函数实现
package main import (
"fmt"
) func Fibonacci() func() int {
a, b := ,
return func() int {
a, b = b, a+b
return a
}
} func main() { f := Fibonacci()
fmt.Println(f())
fmt.Println(f())
fmt.Println(f())
fmt.Println(f())
fmt.Println(f())
fmt.Println(f())
fmt.Println(f())
fmt.Println(f())
fmt.Println(f())
fmt.Println(f())
}
Golang利用select和普通函数分别实现斐波那契数列的更多相关文章
- 01-封装函数求斐波那契数列第n项
		
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
 - HDU4549 M斐波那契数列 矩阵快速幂+欧拉函数+欧拉定理
		
M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Sub ...
 - javascript . 03 函数定义、函数参数(形参、实参)、函数的返回值、冒泡函数、函数的加载、局部变量与全局变量、隐式全局变量、JS预解析、是否是质数、斐波那契数列
		
1.1 知识点 函数:就是可以重复执行的代码块 2. 组成:参数,功能,返回值 为什么要用函数,因为一部分代码使用次数会很多,所以封装起来, 需要的时候调用 函数不调用,自己不会执行 同名函数会覆盖 ...
 - Tips_of_JS 之 利用JS实现水仙花数的寻找与实现斐波那契数列
		
一.水仙花数 1.啥是水仙花数? 水仙花数是指一个 n 位正整数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身.(例如:1^3 + 5^3+ 3^3 = 153) 2.利用JS实现对水 ...
 - 太原面经分享:如何用js实现返回斐波那契数列的第n个值的函数
		
面试攒经验,let's go! 值此高考来临之际,闲不住的我又双叒叕出发去面试攒经验了,去了公司交待一番流程后,面试官甩给了我一张A4纸,上面写着一道js算法笔试题(一开始我并不知道这是在考察js算法 ...
 - P2626 斐波那契数列(升级版)(合数的质数分解, 大数为素数的概率十分小的利用)
		
题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: f(1)=1f(1) = 1 f(1)=1 f(2)=1f(2) = 1f(2)=1 f(n)=f(n−1)+f(n−2)f(n) = f ...
 - golang 闭包求斐波那契数列
		
题目是Go指南中的闭包求斐波那契数列 package main import "fmt" // 返回一个"返回int的函数" func fibonacci() ...
 - go语言之进阶篇通过select实现斐波那契数列
		
一.select作用 Go里面提供了一个关键字select,通过select可以监听channel上的数据流动. select的用法与switch语言非常类似,由select开始一个新的选择块,每个选 ...
 - Python3基础 函数 递归 阶乘与斐波那契数列
		
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
 
随机推荐
- Java读文件
			
public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. */ public static void readFileB ...
 - react全局的公共组件-------弹框 (Alert)
			
最近研究react,发现写一个组件很容易,但是要写一个全局的好像有点麻烦.不能像VUE一样,直接在原型上面扩展,注册全局组件 下面实现一个弹框,只需要引入之后,直接调用方法即可,不需要写入组件 给出我 ...
 - 过拟合VS欠拟合、偏差VS方差
			
1. 过拟合 欠拟合 过拟合:在训练集(training set)上表现好,但是在测试集上效果差,也就是说在已知的数据集合中非常好,但是在添加一些新的数据进来训练效果就会差很多,造成这样的原因是考虑影 ...
 - c#之字符串,列表,接口,队列,栈,多态
			
1.字符串的用法 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
 - SSH异常处理(一)
			
Could not locate getter method for property [com.test_SSH.Employee#createTime] 这个异常是实体类没有映射到对应的.hbm. ...
 - Oracle数据库分区相干知识点
			
Partition Characteristics:1.Partition Key;2.Partitioning Strategies Partitioning Strategies:1. range ...
 - Unity shader学习之Alpha Blend
			
通过 ShaderLab 的 AlphaBlend 能够实现真正的半透明效果. 使用 AlphaBlend 时,需要关闭深度写入 ZWrite Off,但得非常小心物体的渲染顺序, RenderQue ...
 - QString和char*互转
			
1. QString转为char * // QString转QByteArray QByteArray sr = strQ.toLocal8Bit(); int len = sr.length(); ...
 - jQuery选择器--#id、element和.class
			
#id 描述 根据给定的ID匹配一个元素.使用任何的元字符作为名称的文本部分, 它必须被两个反斜杠转义:\\ 参数 id 用于搜索的,通过元素的 id 属性中给定的值 element 概述 根 ...
 - 【CDH学习之一】CDH简介
			
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 zookeeper-3.4.11 一.CDH在商业应用中,对 ...