它使用 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。接下来,它会创建两个线程 t1
和 t2
,分别计算斐波那契数列的前半部分和后半部分。每个线程计算的范围通过 start
和 end
参数指定。计算完成后,主线程会等待两个线程结束并输出结果。
这个程序的输出类似于:
请输入要计算的斐波那契数列项数:10
正在计算斐波那契数列前 10 项...
斐波那契数列前 10 项为:0 1 1 2 3 5 8 13 21 34
这个程序中使用了多线程技术,可以加速斐波那契数列的计算。但需要注意的是,多线程并不一定总是比单线程更快,因为线程的创建和切换也需要一定的时间。在实际应用中,需要根据具体情况选择是否使用多线程。
标签:fib,数列,int,斐波,那契,多线程 From: https://blog.51cto.com/u_16096459/6448256