Как сказал Джастис, вы можете сделать это с C # 3.5 и лямбдами; если у вас есть C # 2.0, вы можете использовать анонимные функции, хотя это будет несколько менее сексуально:
double sqrt(double x) {
Func<double, bool> goodEnough = delegate(double guess) {
return Math.Abs(square(guess) - x) < 0.001;
};
Func<double, double> improve = delegate(double guess) {
return average(guess, x / guess);
};
Func<double, double> sqrtIter = null;
sqrtIter = delegate(double guess) {
return goodEnough(guess) ? guess : sqrtIter(improve(guess));
};
return sqrtIter(1.0);
}
Редактировать: я забыл, Func не определен в C # 2.0, поэтому вы должны определить его самостоятельно:
public delegate TResult Func<T, TResult>(T guess);