在C#中,可以使用多種方法來實現斐波那契數列的并行計算
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
int n = 10; // 要計算的斐波那契數列項數
var result = await FibonacciParallelAsync(n);
Console.WriteLine($"Fibonacci({n}) = {result}");
}
static async Task<long> FibonacciParallelAsync(int n)
{
if (n <= 1)
return n;
long[] results = new long[2];
var task1 = Task.Run(() => results[0] = Fibonacci(n - 1));
var task2 = Task.Run(() => results[1] = Fibonacci(n - 2));
await Task.WhenAll(task1, task2);
return results[0] + results[1];
}
static long Fibonacci(int n)
{
if (n <= 1)
return n;
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
}
在這個示例中,我們首先定義了一個Fibonacci
函數,用于計算給定位置的斐波那契數。然后,我們創建了一個名為FibonacciParallelAsync
的異步函數,該函數使用Task.Run
在兩個單獨的任務中計算斐波那契數列的前兩項。最后,我們使用Task.WhenAll
等待這兩個任務完成,并將結果相加以獲得最終的斐波那契數。
請注意,這種方法仍然遞歸地計算斐波那契數,因此對于較大的n
值,性能可能會受到影響。為了提高性能,可以考慮使用其他方法,如動態規劃或矩陣乘法。