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】-NO.16.EBook.4.Java.1.004-【疯狂Java讲义第3版 李刚】- 内部类
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.004-[疯狂Java讲义第3版 李刚]- 内部类 Style:EBook Series:Java S ...
- TVTK安装
首先感觉到的一点就是在https://www.lfd.uci.edu/~gohlke/pythonlibs/#chaco这个比较受欢迎的下载Python库的网站上下载大于20mb的whl文件时就很可能 ...
- [LeetCode] 35. Search Insert Position_Easy tag: Binary Search
Given a sorted array and a target value, return the index if the target is found. If not, return the ...
- Selenium基础知识(三)元素判断
一.由于有些页面加载完后,某些元素还没有加载,这样就会导致异常,脚本稳定性变差 为了解决这个问题,selenium提供了WebDriverWait以及implicitly_wait()等待 WebDr ...
- 日线做多,15min做空的情况收集
- maven pom文件报错:Multiple annotations found at this line 解决方案(转)
研究maven多模块项目时,因为家里和公司不能同时开发,所以把家里搭建好的项目复制到公司继续研究, 当时家里的电脑搭建好项目之后是没问题的,但是复制到公司的eclipse上之后就看到pom文件出现下面 ...
- 点击地面时,若鼠标点击的偶数次使得Cube向点击点移动,并且点击奇数次Cube变色
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ray10 : ...
- netCore webapi Uow实现方式
参照 http://www.cnblogs.com/GreedyL/p/7474368.html 思路: 1.创建ActionFilter拦截请求,在拦截器中注入IUOW,IUOW里面注入IDbCon ...
- 加快cin读取速度
cin在读取大量数据时会比C里的scanf慢很多,但这并不是cin"无能",而是C++为了兼容C,对cin做了scanf的同步,只要关闭这个同步,cin就会有不弱于scanf的速度 ...
- object base基类分析
uvm_object,是所有uvm data和hierarchical class的基类,实现了copy,compare,print,record之类的函数 扩展类中必须实现create和get_ty ...