我尝试Expression在.NET 4.0中构建一个尾递归.
我可以构建它但是,这个编译的方法不是尾部调用优化的,尽管指定tailCall = true,生成的IL没有tail.前缀指令.
请告诉我如何构建尾调用优化递归Expression?
构建表达式如下.
using System;
using System.Linq.Expressions;
namespace ConsoleApplication2
{
public delegate int RecursiveFunc(RecursiveFunc function, int acc, int n);
internal class Program
{
private static void Main()
{
var funcParam = Expression.Parameter(typeof (RecursiveFunc));
var accParam = Expression.Parameter(typeof (int));
var nParam = Expression.Parameter(typeof (int));
var constZero = Expression.Constant(0, typeof (int));
var accumExpr = Expression.Add(accParam, nParam);
var decrimentExpr = Expression.Decrement(nParam);
var invokeExpr = Expression.Invoke(funcParam, funcParam,
accumExpr, decrimentExpr);
var testExpr = …Run Code Online (Sandbox Code Playgroud)