如果我做对了,智能编译器会检测尾递归函数并将其转换为迭代函数。
除了以函数风格(不变性,函数独立性等)编写的好处之外,尾递归的其他好处还有什么呢?我应该考虑在可能的情况下编写迭代解决方案(在C#中)?
答案 0 :(得分:3)
根据我的经验,我会考虑“性能”的可读性。从我们不得不考虑向前或向左移动数字而不是乘以或除以2的那些日子开始,我们走了很长的路。
话虽如此,回到Uni我们必须递归地解决Eight queen puzzle。完成后,我想我可以为任何电路板尺寸运行它。我认为递归方法在11x11板上崩溃,如果我的记忆正确的话(双关语)。由于我也有一个迭代解决方案(它们实际上非常相同),我决定运行那个,并且可以很容易地解决更大的电路板而没有问题。
你可以直接判断你的快乐,然后争论直到你的手指在键盘上流血,但最后它通常无关紧要。如果您的解决方案有效,请使用它。如果您认为可能会遇到内存问题,因为递归会在堆栈上分配新内存,请继续迭代。在任何一种情况下,具有可读代码将在任何情况下更好地为您服务:)