c# - 在 C# 中,在算法中使用递归函数是一种好习惯吗?

标签 c# algorithm recursion functional-programming performance

<分区>

在许多函数式语言中,使用递归被认为是一种很好的做法。我认为这很好,因为编译器优化函数式语言代码的方式。

但是,在创建算法时,在 C# 中使用递归是一种好习惯吗?就 C# 而言,递归算法会导致您的堆栈急剧增长(如果调用量非常大),这不会很快,并且可能会导致堆栈溢出。或者也有一些优化正在发生以提高递归函数的效率?

如果您能对在函数式语言和 C# 中使用递归的算法进行一些比较(速度、内存、可读性),我将不胜感激。

最佳答案

不使用递归无论如何都会导致您使用自己的“堆栈”重写算法,最终在执行时会遇到类似的情况。

您可以根据算法的需要自定义堆栈大小,但是如果您查看 WPF/Silverlight 和普通 UI 相关算法,它们本质上都是递归的,每次点击、每次按键和每个通知都会经过大量递归方法。

查看 Creating Thread with Custom Stack Size ,

尽管速度可能因算法和复杂性而异,但创建单独的非递归算法会使任务更加复杂,因为您将使用列表、堆栈等自行完成所有数据存储操作。

这是一个设计 vs 性能的问题,如果你想要更好的性能,那么你的非递归算法会执行得更快,但设计和实现这样的算法会花费更长的时间。如果你想要一个更快的解决方案,那么你可以在其他地方编写执行速度较慢的递归算法,但如果差异只有几毫秒或微秒,那么它就不值得这样做。

关于c# - 在 C# 中,在算法中使用递归函数是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3986144/

相关文章:

java - 验证二叉树中的所有数据条目是否相等

recursion - 我如何在 LISP 中创建一个递归函数来计算一个原子在嵌套列表中出现的次数

angular - 根据响应递归组合 HTTP 结果

c# - RibbonControlsLibrary - 如何禁用最小化?

c# - 负载测试的意外行为

list - 通过一次显示两个项目,根据用户的偏好对列表项目进行排名的最有效方法是什么?

python - python中链表的递归合并排序

c# - 为什么在 C# 中创建一个新线程会挂起?

c# - 为什么在C#中int的Size具体是4字节?

algorithm - 找出无向图的最大子集