C#递归方法可以内联吗?
假设我有一个递归方法,或者一个静态方法。它可以内联以提高性能吗?它可能包含一个单行条件运算符。这取决于函数的作用 如果它是阶乘:(5!)==5*4*3*2*1,您可以用以下方式编写它: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
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;
}