<分区>
在许多函数式语言中,使用递归被认为是一种很好的做法。我认为这很好,因为编译器优化函数式语言代码的方式。
但是,在创建算法时,在 C# 中使用递归是一种好习惯吗?就 C# 而言,递归算法会导致您的堆栈急剧增长(如果调用量非常大),这不会很快,并且可能会导致堆栈溢出。或者也有一些优化正在发生以提高递归函数的效率?
如果您能对在函数式语言和 C# 中使用递归的算法进行一些比较(速度、内存、可读性),我将不胜感激。
<分区>
在许多函数式语言中,使用递归被认为是一种很好的做法。我认为这很好,因为编译器优化函数式语言代码的方式。
但是,在创建算法时,在 C# 中使用递归是一种好习惯吗?就 C# 而言,递归算法会导致您的堆栈急剧增长(如果调用量非常大),这不会很快,并且可能会导致堆栈溢出。或者也有一些优化正在发生以提高递归函数的效率?
如果您能对在函数式语言和 C# 中使用递归的算法进行一些比较(速度、内存、可读性),我将不胜感激。
最佳答案
不使用递归无论如何都会导致您使用自己的“堆栈”重写算法,最终在执行时会遇到类似的情况。
您可以根据算法的需要自定义堆栈大小,但是如果您查看 WPF/Silverlight 和普通 UI 相关算法,它们本质上都是递归的,每次点击、每次按键和每个通知都会经过大量递归方法。
查看 Creating Thread with Custom Stack Size ,
尽管速度可能因算法和复杂性而异,但创建单独的非递归算法会使任务更加复杂,因为您将使用列表、堆栈等自行完成所有数据存储操作。
这是一个设计 vs 性能的问题,如果你想要更好的性能,那么你的非递归算法会执行得更快,但设计和实现这样的算法会花费更长的时间。如果你想要一个更快的解决方案,那么你可以在其他地方编写执行速度较慢的递归算法,但如果差异只有几毫秒或微秒,那么它就不值得这样做。
关于c# - 在 C# 中,在算法中使用递归函数是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3986144/