c# - 尾递归的好处

标签 c# recursion functional-programming tail-recursion

<分区>

如果我没猜错,智能编译器会检测尾递归函数并将其转换为迭代函数。

那么除了以函数式风格编写的好处(不变性、函数独立性等)之外,尾递归还有哪些其他好处?我是否应该考虑尽可能(在 C# 中)编写迭代解决方案?

最佳答案

根据我的经验,我会选择可读性而不是“性能”。与我们不得不考虑将数字右移或左移而不是乘以或除以 2 的日子相比,我们已经走了很长一段路。

话虽如此,回到 Uni 我们必须解决 Eight queen puzzle递归地。完成后,我想我真的可以为任何电路板尺寸运行它。如果我没记错(双关语),我认为递归方法在 11x11 板上崩溃了。由于我也有一个迭代解决方案(它们实际上是相当等价的),我决定运行那个解决方案,并且可以毫无问题地轻松解决更大的电路板。

您可以进行基准测试直到您满意为止,并争论直到您的手指在键盘上流血,但最终通常都无关紧要。如果您的解决方案有效,请使用它。如果您认为您可能会遇到内存问题,因为递归会在堆栈上分配新内存,请使用迭代。无论哪种情况,拥有可读代码在任何情况下都会更好地为您服务:)

关于c# - 尾递归的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20313062/

相关文章:

c# - 字符串未被识别为有效的日期时间,当它出现时?

c - C语言中的递归流程以及如何打印输出

使用递归的 Java 多米诺骨牌平铺 : second if block gets called with already updated values

syntax - 是否有函数式编程语言具有用于更改对象部分的语法糖?

functional-programming - 在 Elixir 的外部范围内重新绑定(bind)变量

c# - 我怎样才能在客户端保持与网络服务的 session ?

c# - 由于 Dependent Role 属性不是关键属性,因此 Dependent Role 的重数上限必须为 '*'

recursion - 如何在Rust中将目录路径的平面列表转换为分层结构?

haskell - 有没有办法在 Haskell 中优雅地表示这种模式?

c# - 检查已安装的 Excel 版本并启动它