一尘不染

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

algorithm

在许多功能语言中,使用递归被认为是一种好习惯。我认为这很好,因为编译器可以优化功能语言的代码。

但是在创建算法时在C#中使用递归是否是一种好习惯?关于C#,可以正确地说,递归算法将导致您的堆栈急剧增加(如果调用量很大),而且根本不会很快,并且可能导致堆栈溢出。还是正在进行一些优化以提高递归函数的效率?

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


阅读 252

收藏
2020-07-28

共1个答案

一尘不染

无论如何,不​​使用递归将导致您使用自己的“堆栈”来重写算法,该“堆栈”最终将在执行时受到类似的条件。

您可以根据算法的需要自定义堆栈大小,但是如果您查看WPF /
Silverlight和常规UI相关的算法,它们本质上都是递归的,并且每次单击,每次按键和每条通知都会经过许多递归方法。

查看创建具有自定义堆栈大小的线程

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

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

2020-07-28