我正在玩一个去年出现的code golf question yesterday for building a christmas tree,我把一个快速的递归算法拼凑起来完成这项工作:
static string f(int n, int r)
{
return "\n".PadLeft(2 * r, '*').PadLeft(n + r)
+ (r < n ? f(n, ++r) : "*".PadLeft(n));
}
我想知道我是否可以用Func做同样的事情:
Func<int,int,string> f = (n, r) => {
return "\n".PadLeft(2 * r, '*').PadLeft(n + r)
+ (r < n ? f(n, ++r) : "*".PadLeft(n));
};
这个将完成这项工作,但递归部分不会识别对f的调用实际上是对自身的调用。这将使我得出结论,Func 不能递归地调用自己 - 但我想知道我是否得出错误的结论,或者是否可以做到但需要采用不同的方法。
有什么想法吗?
答案 0 :(得分:15)
Func<int, int, string> f = null;
f = (x, y) => f(x, y);
显然这会导致StackOverflowException,但你明白了。
答案 1 :(得分:5)
请参阅this了解非常令人讨厌的递归lambda,固定点,Y组合器等。非常有趣的阅读。