Опираясь на идею, представленную CodeInChaos, вы можете создать
static IEnumerable<T> Series<T>(Func<T,T> function,
T seed,
int interations = int.MaxValue)
{
T value = seed;
for (int i = 0; i < iterations; i++)
{
value = function(value);
yield return value;
}
}
и
static IEnumerable<T> Series<T>(Func<T, int, T> function,
T seed,
int interations = int.MaxValue)
{
T value = seed;
for (int i = 0; i < iterations; i++)
{
value = function(value, i);
yield return value;
}
}
, что позволит вам выполнять итерации по любым сериям, которые вам нравятся, например:
double total = 0;
double newTotal = 0;
foreach (double v in Series(v => v * .5, 1.0, 100))
{
newTotal += v;
Console.WriteLine(total);
if (total == newTotal) break;
total = newTotal;
}