斐波纳契范围计算:C#方法

时间:2013-12-20 22:35:26

标签: c# .net task-parallel-library fibonacci

我正在研究Fibonacci范围计算算法。

我已经尝试过简单的 - 增加for循环和矩阵乘法,并尝试使用TaskParallel和其他TPL功能重构它们。

但最简单的(for循环的增量)仍然覆盖所有其他人。

public static IEnumerable<int> FibonacciSimple(uint x)
    {
        int prev = -1;
        int next = 1;
        for (uint i = 0; i < x; i++)
        {
            int sum = prev + next;
            prev = next;
            next = sum;
            yield return sum;
        }
    }

这是否意味着CLR关心所有这些并且没有挑战空间,或者有什么可以玩的?

1 个答案:

答案 0 :(得分:2)

您是否尝试过使用LINQ,只是为了好玩和参考:

int n = 10;
int result = Enumerable.Range(1, n)
                       .Skip(2)
                       .Aggregate(new { Current = 1, Prev = 1 },
                                  (x, index) => new { Current = x.Prev + x.Current, Prev = x.Current })
                       .Current;

比添加AsParallel后快了两倍:

int fib2 = Enumerable.Range(1, n)
                     .AsParallel()
                     .Skip(2)
                     .Aggregate(new { Current = 1, Prev = 1 },
                                (x, index) => new { Current = x.Prev + x.Current, Prev = x.Current })
                     .Current;

因为Fibonacci计算不能轻易并行化,只是增加了线程开销。