小编時計屋*_*時計屋的帖子

我可以构建一个尾调用递归优化表达式吗?

我尝试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)

.net recursion tail-recursion expression-trees

5
推荐指数
1
解决办法
496
查看次数