我想并行化Fibonacci函数的递归调用。 我该怎么做呢?这个程序不只是关于计算斐波那契。我必须打印每个测试用例N后生成的0和1的数量。 提前致谢。
#include <stdio.h>
int fibonacci(int n);
int ze = 0, on=0;
int main() {
int i, T, N[41];
scanf("%d", &T);
if (T < 1 || T > 50)
return 0;
for (i = 0; i < T; i++) {
scanf("%d", &N[i]);
if (N[i] < 0 || N[i] > 40)
return 0;
}
for (i = 0; i < T; i++, ze = 0, on = 0) {
fibonacci(N[i]);
printf("%d %d\n", ze, on);
}
}
int fibonacci(int n) {
if (n == 0) {
ze += 1;
return 0;
}
if (n == 1) {
on += 1;
return 1;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
答案 0 :(得分:0)
我对并行处理或多线程一无所知,所以对我也有这样的答案会很好。
然而,与此同时,您可以通过智能化来解决您的问题。你说这个目的不仅仅是为了计算斐波纳契数,而且最终结果只不过是两个斐波那契数,一个是一个接一个的顺序。
具体而言,ze
是订单x - 1
的斐波纳契数,而on
是订单x
的斐波纳契数。
对于on
,我必须说,这显然是地狱,因为它是数字中一个的计数。另一方面,ze
就像那样,因为你定义函数的方式。
因此,您可以更有效地预先计算flrst 40斐波纳契数,然后使用它们。如果你愿意,你可以高达~90。计算出前40~90个斐波纳契数应该在瞬间完成。