Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尾部递归优化是在VisualStudio10x64调试中进行的,但不是在发行版中?_C#_Visual Studio 2010 - Fatal编程技术网

C# 尾部递归优化是在VisualStudio10x64调试中进行的,但不是在发行版中?

C# 尾部递归优化是在VisualStudio10x64调试中进行的,但不是在发行版中?,c#,visual-studio-2010,C#,Visual Studio 2010,最初,我在x86模式下遇到了一个stackoverflow异常。因为我注意到x64将优化尾部递归,所以我切换到使用x64编译。而且它在调试模式下运行得很正常。。但是当我尝试运行发布代码时。。它又吐了出来。。有什么可能的原因吗?应用尾部递归优化的规则是复杂且不断变化的 从正确性的角度来看,我强烈建议您不要依赖尾部递归。如果您知道您的代码可以进行尾部优化,如果你依赖它,为什么不自己做呢?@duedl0r:我更欣赏函数式编程的编码风格,所以我不太愿意将尾部递归改为一些循环……也许你可以用一些linq来

最初,我在x86模式下遇到了一个stackoverflow异常。因为我注意到x64将优化尾部递归,所以我切换到使用x64编译。而且它在调试模式下运行得很正常。。但是当我尝试运行发布代码时。。它又吐了出来。。有什么可能的原因吗?

应用尾部递归优化的规则是复杂且不断变化的


从正确性的角度来看,我强烈建议您不要依赖尾部递归。

如果您知道您的代码可以进行尾部优化,如果你依赖它,为什么不自己做呢?@duedl0r:我更欣赏函数式编程的编码风格,所以我不太愿意将尾部递归改为一些循环……也许你可以用一些linq来做?似乎也是功能性风格:)@coilfang-ehh因为你不能。Int-Foo(){return-Foo();}可以永远运行,当tail调用优化时,手动执行优化将花费很长时间。真的,我不喜欢像“为什么要使用它,使用我所做的东西”这样的非建设性评论。如果colinfang使用功能性风格——让他来做。如果你不知道解决办法,就不要进行毫无意义的讨论@科林芳:你能做一些简单的测试吗?编写递归阶乘并检查它是否能很好地实现TCO。如果可以,那么Jon Skeet是对的(“应用尾部递归优化的规则是复杂且不断变化的”),如果不能,那么我会说这是项目配置的问题(但实际上……不知道)。它是1977年发明的,gcc,g++,mvc++,scheme使用它,所以可以说,这是C的一个问题♯ 优化,而不是TCO本身。我说的对吗?@kgadek:如果语言不能保证尾部递归,那么你就不能依赖它。Scheme是一个语言示例,因为一致性语言实现需要进行尾部调用优化。C#不是一种需要这样做的语言,因此如果你因为太多的递归而破坏了堆栈,除了C#标准之外,没有什么可以抱怨的。