C# 尾部递归的好处

C# 尾部递归的好处,c#,recursion,functional-programming,tail-recursion,C#,Recursion,Functional Programming,Tail Recursion,如果我没有弄错的话,智能编译器会检测尾部递归函数并将其转换为迭代函数 因此,除了以函数式风格编写的好处(不变性、函数独立性等)之外,尾部递归还有什么其他好处?我应该考虑在可能的情况下(用C#)编写迭代解决方案吗?根据我的经验,我将讨论可读性而不是“性能”。我们从我们不得不考虑把数字向右或向左移位而不是乘以或除以2的日子走了很长的路。 话虽如此,回到Uni,我们必须递归地解决这个问题。一旦完成,我想我可以运行任何规模的董事会真的。我认为如果我的内存正常,递归方法会在11x11板上崩溃(双关语)。因

如果我没有弄错的话,智能编译器会检测尾部递归函数并将其转换为迭代函数


因此,除了以函数式风格编写的好处(不变性、函数独立性等)之外,尾部递归还有什么其他好处?我应该考虑在可能的情况下(用C#)编写迭代解决方案吗?

根据我的经验,我将讨论可读性而不是“性能”。我们从我们不得不考虑把数字向右或向左移位而不是乘以或除以2的日子走了很长的路。 话虽如此,回到Uni,我们必须递归地解决这个问题。一旦完成,我想我可以运行任何规模的董事会真的。我认为如果我的内存正常,递归方法会在11x11板上崩溃(双关语)。因为我也有一个迭代的解决方案(它们实际上相当等价),所以我决定运行这个解决方案,并且可以轻松地解决更大的电路板而没有问题


你可以基准测试直到你高兴,争论直到你的手指在键盘上流血,但最终这通常并不重要。如果您的解决方案有效,请使用它。如果您认为由于递归在堆栈上不断分配新内存,可能会遇到内存问题,请使用迭代。在任何一种情况下,拥有可读的代码在任何情况下都会为您提供更好的服务:)

我同意您的观点,尾部递归函数的可读性要高得多,但是直到现在,我还没有遇到性能问题。使用递归的问题。我想我会坚持一段时间…!:)。试着解决好老皇后的问题。。。也许有了今天的硬件,你可以使用更大的电路板,但最终你会达到极限。然后您可以看到迭代的好处。但在大多数情况下,它们是相同的,但不同的。初学者在可读之前通常需要一些习惯递归的知识。尾部递归也是如此。当你看过并写过一些东西时,我认为在可读性方面没有什么不同。初学者程序员通常也需要一些东西来适应迭代!当我上大学时,第一门编程课程实际上是用Haskell教授的,所以在我们学习for循环之前,递归自然就出现了。java,C++,C,LISP和汇编程序,我们不认为这是从根本上学习程序的难度(或者更容易)。在执行高级OO与CPU对话并将值推送到寄存器后,让我发疯。。。我想如果是另一种情况的话,我会因为失去你从低层得到的控制而发疯:)对于F#see:see:@GuyCoder,F#blog帖子非常有用,谢谢你