C#递归方法可以内联吗?

C#递归方法可以内联吗?,c#,recursion,inline,tail-recursion,C#,Recursion,Inline,Tail Recursion,假设我有一个递归方法,或者一个静态方法。它可以内联以提高性能吗?它可能包含一个单行条件运算符。这取决于函数的作用 如果它是阶乘:(5!)==5*4*3*2*1,您可以用以下方式编写它: private static int Factorial(int v) { if (v == 1) return v; return v * Factorial(v - 1); } 或: 私有静态in

假设我有一个递归方法,或者一个静态方法。它可以内联以提高性能吗?它可能包含一个单行条件运算符。

这取决于函数的作用

如果它是阶乘:(5!)==5*4*3*2*1,您可以用以下方式编写它:

private static int Factorial(int v)
        {
            if (v == 1)
                return v;
            return v * Factorial(v - 1);
        }
或:

私有静态int Factorial2(int v)
{
int i=1;
累计积分=1;
while(i++
但是-我确定不是所有的函数都可以像那个一样转移。 至于性能,第一个需要3百万分之一,n=80,第二个需要0百万分之一。。。所以,是的,正如你所想,这是一个优势

编辑: 我看到你现在放置了一个“tailrecursion”标签,在标签上悬停时,它会告诉你答案。是的,编译器知道如何将这些递归设置为“内联”。我的时间测试是指“调试”模式。。也应该在发行版中测试。

这个怎么样


即使您希望编译器内联您的方法。并非所有方法都可以内联。在这种情况下,递归方法不能是内联方法,因为它需要调用自身

积极的在线学习
指定应尽可能内联该方法


内联正在用方法内容替换方法调用,因此递归方法不能内联。

这就是您要找的吗@SudheeshSinganamalla不,我对内联方法感兴趣,而不是匿名方法。真正的问题是“这会提高性能吗?”你能和我们分享一下有问题的代码吗?这是一个假设。
private static int Factorial2(int v)
    {
        int i = 1;
        int accum = 1;
        while (i++ < v)
            accum *= i;
        return accum;
    }
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static int DoSomething()
{
    return 0;
}