非递归写法
static int FibonacciNumber(int n)
{
int a = 0;
int b = 1;
int tmp;
for (int i = 0; i < n; i++)
{
tmp = a;
a = b;
b += tmp;
}
return a;
}
递归写法
static void Main(string[] args)
{
var genaerator = new FibonacciGenerator();
foreach (var digit in genaerator.Generate(15))
{
Console.WriteLine(digit);
}
}
public class FibonacciGenerator
{
private Dictionary<int, int> _cache = new Dictionary<int, int>();
private int Fib(int n) => n < 2 ? n : (FibValue(n - 1) + FibValue(n - 2));
private int FibValue(int n)
{
if (!_cache.ContainsKey(n))
{
_cache.Add(n, Fib(n));
}
return _cache[n];
}
public IEnumerable<int> Generate(int n)
{
for (int i = 0; i < n; i++)
{
yield return FibValue(i);
}
}
}