当前位置: 首页 > news >正文

汕头市建设局网站名词解释seo

汕头市建设局网站,名词解释seo,一级网站建设,广告网页推广方案目录 1 协程2 实例-计算斐波那契序列2.1 斐波那契序列2.2 代码 3 运行 1 协程 协程(Coroutines)是一个可以挂起执行以便稍后恢复的函数。协程是无堆栈的:它们通过返回到调用方来暂停执行,并且恢复执行所需的数据与堆栈分开存储。这允许异步执行的顺序代码…

目录

  • 1 协程
  • 2 实例-计算斐波那契序列
    • 2.1 斐波那契序列
    • 2.2 代码
  • 3 运行

1 协程

  协程(Coroutines)是一个可以挂起执行以便稍后恢复的函数。协程是无堆栈的:它们通过返回到调用方来暂停执行,并且恢复执行所需的数据与堆栈分开存储。这允许异步执行的顺序代码(例如,在没有显式回调的情况下处理非阻塞I/O),还支持惰性计算无限序列上的算法和其他用途。
协程类图如下:
协程类

2 实例-计算斐波那契序列

2.1 斐波那契序列

斐波那契数列是一位意大利的数学家,他闲着没事去研究兔子繁殖的过程,研究着就发现,可以写成这么一个序列:1,1,2,3,5,8,13,21… 也就是每个数等于它前两个数之和。那么给你第 n 个数,问 F (n) 是多少。
用数学公式表示很简单: f(n) = f(n-1) + f(n-2)
下面的例子使用协程来计算斐波那契序列

2.2 代码

#include <coroutine>
#include <cstdint>
#include <exception>
#include <iostream>template <typename T>
struct Generator
{struct promise_type;using handle_type = std::coroutine_handle<promise_type>;struct promise_type{T value_;std::exception_ptr exception_;Generator get_return_object(){return Generator(handle_type::from_promise(*this));}std::suspend_always initial_suspend() { return {}; }std::suspend_always final_suspend() noexcept { return {}; }void unhandled_exception() { exception_ = std::current_exception(); }template<std::convertible_to<T> From>std::suspend_always yield_value(From&& from)//设置完值后挂起协程{value_ = std::forward<From>(from);return {};}void return_void() {}};handle_type h_;Generator(handle_type h) : h_(h) {}~Generator() { h_.destroy(); }explicit operator bool(){fill();return !h_.done();}T operator()(){fill();full_ = false;return std::move(h_.promise().value_);}
private:bool full_ = false;void fill(){if(!full_){h_();//if(h_.promise().exception_)std::rethrow_exception(h_.promise().exception_);full_ = true;}}
};Generator<std::uint64_t>
fibonacci_sequence(unsigned n)//斐波那契序列
{if(n == 0)co_return;//计算结束 if(n > 94)throw std::runtime_error("太大斐波那契序列,元素将会溢出");co_yield 0;//挂起协程if(n == 1)co_return;//计算结束co_yield 1;if(n == 2)co_return;std::uint64_t a = 0;std::uint64_t b = 1;for(unsigned i = 2; i < n; ++i){std::uint64_t s = a + b;co_yield s;//挂起协程a = b;b = s;}//计算结束
}int main(int argc, char *argv[])
{int n = 10;if(argc > 1)n = std::stoul(argv[1]);try{auto gen = fibonacci_sequence(n);for(int j = 0; gen; ++j)//调用operator bool()判断是gen是否计算结束std::cout << "fib(" << j << ")=" << gen() << std::endl;//调用T operator()()返回计算j对应的斐波那契序列值}catch(const std::exception& e){std::cerr << "异常: " << e.what() << std::endl;}catch(...){std::cerr << "未知异常\n";}return 0;
}

3 运行

$./example2 0
$./example2 0 1
fib(0)=0
$./example2 0 4
fib(0)=0
fib(1)=1
fib(2)=1
fib(3)=2
$./example2 0 10
fib(0)=0
fib(1)=1
fib(2)=1
fib(3)=2
fib(4)=3
fib(5)=5
fib(6)=8
fib(7)=13
fib(8)=21
fib(9)=34
$./example2 95
异常: 太大斐波那契序列,元素将会溢出
http://www.yayakq.cn/news/27108/

相关文章:

  • 延吉最好的网站建设公司企业网站网络营销
  • 我的世界怎么做神器官方网站网站全站开发
  • 模板做网站网站建设费用怎么算
  • 电商网站开发与运营做个页面多少钱
  • 营销网站建设规划网站没有做适配 怎么办
  • 网站建设sz886wordpress 主题升级
  • 网站建设初步策划方案最好的app制作公司
  • 商务网站建设与维护补考试卷韩都衣舍的网站建设
  • 网站开发哪个公司好网页网站关系
  • html5 音乐网站学习网首页
  • 人社局网站建设步骤wordpress 4.7
  • 网站cms建设wordpress3d标签插件
  • 南阳网站建设推广网站会员后台管理系统
  • 做优化网站建设服务专业的网站建设公司
  • 最佳配色网站学做淘宝客网站有哪些
  • 已经注册了域名 怎么做网站jsp建网站
  • 企业做网站需要做哪些工作网站如何被搜索引擎收录
  • 网站标题正确书写标准网页制作与网站建设设计价格
  • 云南省网站备案要求专业的设计网站有哪些内容
  • 郑州网站设计的公司爱网站在线观看免费
  • 上海网站制作公司多少钱海门建网站公司
  • 百度站长平台推出网站移动化大赛互联网公司排名广州
  • 网站图怎么做会高清网站建站工作室
  • 做网站常用代码向右浮动怎么写学ps做兼职的网站有哪些
  • wordpress js写法seo工具排行榜
  • 浙江省职业能力建设处网站百度竞价防软件点击软件
  • 做简历的网站viso广西网站建设公司哪家好
  • 建行国际互联网网站软件工程项目案例
  • 二级目录怎么做网站济南建网站公
  • 南山建网站公司网站开发电脑内存要多少钱