Для моего приложения я построил итератор, и мне нужно использовать каждое из значений, которые он выдает, вместе с предыдущим.
Например, рассмотрим следующий итератор, который выдает первые члены Последовательность Фибоначчи:
public static IEnumerable<int> GetFibonacciNumbers(int count)
{
int a = 0;
int b = 1;
int i = 0;
while (i < count)
{
yield return a;
int temp = a;
a = b;
b = temp + b;
i++;
}
}
Теперь я хочу использовать этот перечислитель для вычисления все более точных оценок золотого сечения, что означает, что мне нужно использовать полученное значение наряду с предыдущим. Работает следующий подход:
static void Main(string[] args)
{
int fib0 = 0;
foreach (int fib1 in GetFibonacciNumbers(10))
{
var phi = (double)fib1 / fib0;
Console.WriteLine(phi);
fib0 = fib1;
}
}
Проблемы заключаются в том, что первое значение для phi
является неправильным, поскольку первое значение для fib0
на самом деле не является частью последовательности.