首页 > 其他分享 >计算斐波那契数列的前 N 项

计算斐波那契数列的前 N 项

时间:2023-06-09 16:07:39浏览次数:48  
标签:fib 数列 int 斐波 那契 多线程

它使用 C++11 中的多线程库 thread 来并行计算斐波那契数列的前 N 项:

#include <iostream>
#include <thread>
#include <vector>

void fib(std::vector<int>& fib, int start, int end) {
    for (int i = start + 2; i < end; i++) {
        fib[i] = fib[i-1] + fib[i-2];
    }
}

int main() {
    int N;
    std::cout << "请输入要计算的斐波那契数列项数:";
    std::cin >> N;

    std::vector<int> fib(N);
    fib[0] = 0;
    fib[1] = 1;

    std::cout << "正在计算斐波那契数列前 " << N << " 项..." << std::endl;

    std::thread t1(fib, std::ref(fib), 0, N/2);
    std::thread t2(fib, std::ref(fib), N/2, N);

    t1.join();
    t2.join();

    std::cout << "斐波那契数列前 " << N << " 项为:";
    for (int i = 0; i < N; i++) {
        std::cout << fib[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

这个代码首先会要求用户输入要计算的斐波那契数列的项数 N。然后,它会创建一个长度为 N 的数组 fib,并初始化前两项为 0 和 1。接下来,它会创建两个线程 t1t2,分别计算斐波那契数列的前半部分和后半部分。每个线程计算的范围通过 startend 参数指定。计算完成后,主线程会等待两个线程结束并输出结果。

这个程序的输出类似于:

请输入要计算的斐波那契数列项数:10
正在计算斐波那契数列前 10 项...
斐波那契数列前 10 项为:0 1 1 2 3 5 8 13 21 34

这个程序中使用了多线程技术,可以加速斐波那契数列的计算。但需要注意的是,多线程并不一定总是比单线程更快,因为线程的创建和切换也需要一定的时间。在实际应用中,需要根据具体情况选择是否使用多线程。

标签:fib,数列,int,斐波,那契,多线程
From: https://blog.51cto.com/u_16096459/6448256

相关文章

  • P5012 水の数列 题解
    水の数列题目大意对于给定的数列\(a\),选择一个数\(x\),定义其得分为数列中所有小于等于\(x\)的数形成的若干个连续区间的平方和除以\(x\)所得到的数。现进行多次询问,每次询问给定两个数\(l,r\),要求出一个得分最大的\(x\),满足数列中所有小于等于\(x\)的数形成的若干个......
  • 力扣-509. 斐波那契数 70. 爬楼梯
    参考:https://leetcode.cn/problems/climbing-stairs/solutions/286022/pa-lou-ti-by-leetcode-solution/更详细的动态规划题解:https://leetcode.cn/problems/fibonacci-number/solutions/8330/dong-tai-gui-hua-tao-lu-xiang-jie-by-labuladong/题目:斐波那契数(通常用F(n)表......
  • 算法刷题记录:素数中的等差数列
    题目链接https://ac.nowcoder.com/acm/contest/19859/I题目分析模拟!模拟!模拟!下标要计算好。自己的思路是放发现两个相等的差时,说明至少可以输出了,也就是合法情况,然后用指针R往后扩展。我选择的R是闭区间的,即[L,R]的区间已经看过了,所以i可以直接从i+1开始看。所以R赋值给i后......
  • 对话框变化大小后。CBCGPListCtrl、CListCtrl重新显示行数列数m_list_.Arrange(LVA_AL
    h文件中afx_msgvoidOnSize(UINTnType,intcx,intcy);voidResizeUI();vector<CRect>m_vec_rect_; BEGIN_MESSAGE_MAP(CDlgXXX,CBCGPDialog) ON_WM_SIZE() END_MESSAGE_MAP()BOOLCDlgXXX::OnInitDialog(){ CBCGPDialog::OnInitDialog(); EnableVisua......
  • 等差数列生成器
      1classArithmeticProgression:23def__init__(self,begin,step,end=None):4self.begin=begin5self.end=end6self.step=step789def__iter__(self):10result=typ......
  • 等比数列二分求和
    今天我们学习如何有效地求表达式的值。对于这个问题,用二分解决比较好。(1)当时,(2)当时,那么有    (3)当时,那么有   代码:#include<iostream>#include<string.h>#include<stdio.h>usingnamespacestd;constintM=1000000007;typedeflonglongLL;LLpower(LLa,LL......
  • 从蓝桥杯来谈Fibonacci数列
    2014年蓝桥杯的第九题是这样描述的:     给定Fibonacci数列F[],其中,,求表达式      的值。其中在讲解这道题之前,我们先来看一个简单版的。题目如下:题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1194分析:可以看出本题就是直接求,虽然这里的......
  • 斐波那契数列:2.迭代法
    斐波那契数列:2.迭代法#include<stdio.h>intfib(intm){if(m==1||m==2){return1;}inta=1,b=1,aw=0;while(m>=2){aw=aw+a;a=b;b=aw;m=m-1;}returnaw;}intmain(){intn;scanf("%d",&n);p......
  • 斐波那契数列:1.递归法
    斐波那契数列:1.递归法#include<stdio.h>intfib(intm){if(m>=3){returnfib(m-1)+fib(m-2);}else{return1;}}intmain(){intn;scanf("%d",&n);printf("%d",fib(n));return0;}......
  • 斐波那契数列:2.数组
    斐波那契数列:2.数组#include<stdio.h>intfib(intm){inti;inta[100]={0,1,1};for(i=2;i<=m;i++){a[i]=a[i-1]+a[i-2];}returna[m];}intmain(){intn;scanf("%d",&n);printf("%d",fib(n));return0......