using System.Collections.Concurrent;
ConcurrentDictionary<ulong, ulong> ConPairs = new();
if (!args.Any())
{
throw new Exception("请在参数中输入你要递归的斐波那契运算");
}
List<ulong> nums = new();
try
{
ulong numSize =(ulong)Convert.ToInt64(args[0]);
for (ulong i = 1; i <= numSize; i++)
{
nums.Add(i);
}
}catch(Exception e)
{
throw new Exception("参数错误,无法解析", e);
}
List<ulong> fbi = nums.AsParallel().Select(n =>FbiNum(n,ref ConPairs)).OrderBy(n=>n).ToList();
Console.WriteLine( "结果:" );
fbi.ForEach(e =>
{
Console.WriteLine(e);
});
static ulong FbiNum(ulong num,ref ConcurrentDictionary<ulong, ulong> dic)
{
if(num == 1) return 0;
if(num == 2) return 1;
ulong getNum;
ulong result;
if (dic.TryGetValue(num,out getNum))
{
result = getNum;
}
else
{
result = FbiNum(num - 1, ref dic) + FbiNum(num - 2, ref dic);
dic.TryAdd(num, result);
Console.WriteLine($"加入缓存: {result}");
}
return result;
}