go和c#实现斐波那契数列
首先通过C#实现斐波那契数列:
using System.Threading.Channels; namespace App001
{
internal class Program
{ static async Task Main()
{
var count = 45;
await SomeTask(count); //channel run time:00:00:10.0122552ms
//await OneTask(count); //run time:00:00:23.1586639ms
Console.Read(); //多次运行结果类似
} static async Task SomeTask(int count)
{
var startTime = DateTime.Now;
var channel = Channel.CreateUnbounded<long>();
for (int i = 0; i < count; i++)
{
await channel.Writer.WriteAsync(i);
}
channel.Writer.Complete(); List<Task> tasks = new List<Task>();
for (int i = 0; i < 10; i++)
{
var task = Task.Factory.StartNew(async () =>
{
while (await channel.Reader.WaitToReadAsync())
{
if (channel.Reader.TryRead(out var result))
{
/***/
Console.WriteLine(Fib(result));
}
}
});
tasks.Add(task);
} await Task.WhenAll(tasks.ToArray()).ContinueWith(t =>
{
Console.WriteLine($"channel run time:{ DateTime.Now.Subtract(startTime)}ms");
});
} static Task OneTask(int count)
{
var startTime = DateTime.Now;
for (int i = 0; i < count; i++)
{
Console.WriteLine(Fib(i));
}
Console.WriteLine($"run time:{ DateTime.Now.Subtract(startTime)}ms");
return Task.CompletedTask;
} static long Fib(long n)
{
if (n <= 2)
return 1;
else
return Fib(n - 1) + Fib(n - 2);
}
}
}
这里是一个任务cpu和内存占用情况:

这里是十个任务cpu和内存占用情况:

结果:

下面是go实现斐波那契的代码:
func main() {
startTime := time.Now()
jobs := make(chan int, 100)
results := make(chan int, 100)
for count := 0; count < 10; count++ {
go worker(jobs, results)
}
for i := 0; i < 45; i++ {
jobs <- i
}
close(jobs)
for j := 0; j < 45; j++ {
fmt.Println(<-results)
}
endTime := time.Now()
fmt.Println("channel run time:", endTime.Sub(startTime), "ms")
}
func worker(jobs <-chan int, results chan<- int) {
for n := range jobs {
results <- fib(n)
}
}
func fib(n int) int {
if n <= 2 {
return 1
}
return fib(n-1) + fib(n-2)
}
cpu和内存占用情况:

运行结果:

代码示例:
exercise/斐波那契Test at master · liuzhixin405/exercise (github.com)
go/concurrencyTest at main · liuzhixin405/go (github.com)
go和c#实现斐波那契数列的更多相关文章
- C#求斐波那契数列第30项的值(递归和非递归)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 斐波拉契数列加强版——时间复杂度O(1),空间复杂度O(1)
对于斐波拉契经典问题,我们都非常熟悉,通过递推公式F(n) = F(n - ) + F(n - ),我们可以在线性时间内求出第n项F(n),现在考虑斐波拉契的加强版,我们要求的项数n的范围为int范围 ...
- js中的斐波那契数列法
//斐波那契数列:1,2,3,5,8,13…… //从第3个起的第n个等于前两个之和 //解法1: var n1 = 1,n2 = 2; for(var i=3;i<101;i++){ var ...
- 剑指Offer面试题:8.斐波那契数列
一.题目:斐波那契数列 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项.斐波那契数列的定义如下: 二.效率很低的解法 很多C/C++/C#/Java语言教科书在讲述递归函数的时 ...
- 算法: 斐波那契数列C/C++实现
斐波那契数列: 1,1,2,3,5,8,13,21,34,.... //求斐波那契数列第n项的值 //1,1,2,3,5,8,13,21,34... //1.递归: //缺点:当n过大时,递归 ...
- 洛谷P1962 斐波那契数列 || P1349 广义斐波那契数列[矩阵乘法]
P1962 斐波那契数列 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数 ...
- Python递归及斐波那契数列
递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n,用函数 fact(n)表示,可 ...
- 简单Java算法程序实现!斐波那契数列函数~
java编程基础--斐波那契数列 问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 思路:可能出现的情况:(1) n=1 ,一种方法 ;(2)n=2 ...
- js 斐波那契数列(兔子问题)
对于JS初学者来说,斐波那契数列一直是个头疼的问题,总是理不清思路. 希望看完这篇文章之后会对你有帮助. 什么是斐波那契数列 : 答: 斐波那契数列,又称黄金分割数列.因数学家列昂纳多·斐波那契(Le ...
- 剑指offer三: 斐波拉契数列
斐波拉契数列是指这样一个数列: F(1)=1; F(2)=1; F(n)=F(n-1)+F(n); public class Solution { public int Fibonacci(int n ...
随机推荐
- 鸿蒙HarmonyOS实战-ArkTS语言(状态管理)
前言 状态管理是指在应用程序中维护和更新应用程序状态的过程.在一个程序中,可能有很多不同的组件和模块,它们需要共享和相互作用的状态.如果没有一个明确的方式来管理这些状态,就会导致代码混乱.不易维护和难 ...
- 美团一面:说一说Java中的四种引用类型?
引言 在JDK1.2之前Java并没有提供软引用.弱引用和虚引用这些高级的引用类型.而是提供了一种基本的引用类型,称为Reference.并且当时Java中的对象只有两种状态:被引用和未被引用.当一个 ...
- 探寻UUID的起源与奥秘:从时间戳到唯一标识
1. UUID起源与原理 UUID(Universally Unique Identifier)是一种唯一标识符,最初由Apollo计算机公司的软件工程师Roedy Green在1987年提出.其原理 ...
- linux 查询CPU相关信息
1.获取CPU详细信息 cat /proc/cpuinfo 2.查看物理CPU个数 cat /proc/cpuinfo |grep "physical id"|sort |uniq ...
- MyBatis中的association与collection应用
MyBatis中的association与collection应用 在使用 MyBatis进行数据库操作时,经常会遇到需要处理对象之间的关联关系和集合映射的情况.为了更好地实现对象关系映射,MyBat ...
- KingbaseES V8R6集群运维案例--主库PITR恢复后备库无法连接到集群
案例说明: KingbaseES V8R6集群,在主库执行PITR恢复后,clone备库:但是启动集群后,备库无法连接到主库,流复制状态和集群节点状态异常. 适用版本: KingbaseES V8R6 ...
- 【问题解决1】fatal error: X11/XXXX.h: No such file or directory
问题现象 编译鸿蒙代码时,报如下类似的错误: 错误1: 错误2: 解决方法 step 1:安装依赖文件 sudo apt-get install apt-file sudo apt-file upda ...
- #二叉堆#JZOJ 4320 旅行
分析 有一个很重要的性质就是如果经过道路数为奇数,把两个点到根节点的路径长加起来就是两个点间的路径长(正负消掉了) 而且众所周知的是奇数+偶数=奇数 可以预处理每个点到根节点的路径长度(按照题目要求) ...
- #前缀和优化dp#牛客练习赛71 C 数学考试
题目 求\(1\sim n\)的排列,有\(m\)个限制条件,第\(i\)个限制条件\(p_i\), 表示前\(p_i\)个数不能是\(1\sim p_i\)的排列,求符合要求的排列的个数. 分析 这 ...
- #dp#洛谷 5774 [JSOI2016]病毒感染
题目 分析 此题肯定不是绿题,哪有这么恶心的dp 试想这样的情形:假设当 JYY 第一次抵达村庄 \(i\),未作救治并直接前往了另一个村庄.那么由于 \(i\) 村庄的人们求生心切, 一旦当 JYY ...