代码之家  ›  专栏  ›  技术社区  ›  BenAlabaster

Func能否递归调用自身?

  •  6
  • BenAlabaster  · 技术社区  · 16 年前

    我在和一个男孩玩 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));
    };
    

    将 不能 递归地调用它自己——但我想知道我是否得出了错误的结论,或者它是否可以做到,但需要一种不同的方法。

    2 回复  |  直到 9 年前
        1
  •  16
  •   Yuriy Faktorovich    16 年前
    Func<int, int, string> f = null;
    f = (x, y) => f(x, y);
    

    显然,这将导致StackOverflowException,但您明白了。

        2
  •  5
  •   Anton Gogolev    16 年前

    this 暂时 非常