如何并行化这个C程序?

时间:2014-02-23 06:26:27

标签: c parallel-processing

我想并行化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);
}

1 个答案:

答案 0 :(得分:0)

我对并行处理或多线程一无所知,所以对我也有这样的答案会很好。

然而,与此同时,您可以通过智能化来解决您的问题。你说这个目的不仅仅是为了计算斐波纳契数,而且最终结果只不过是两个斐波那契数,一个是一个接一个的顺序。

具体而言,ze是订单x - 1的斐波纳契数,而on是订单x的斐波纳契数。

对于on,我必须说,这显然是地狱,因为它是数字中一个的计数。另一方面,ze就像那样,因为你定义函数的方式。

因此,您可以更有效地预先计算flrst 40斐波纳契数,然后使用它们。如果你愿意,你可以高达~90。计算出前40~90个斐波纳契数应该在瞬间完成。