关于递归和迭代的理解
个人理解:递归调用自己的函数,占用内存较多,计算耗费时间多;迭代则编程较为复杂,但一旦编程好,计算效率高。所以正确运用递归很重要。
这么理解对不对?请过来人回答一下 递归比较难理解,但是能很好的优化代码。 康小泡 发表于 2016-5-3 16:28
递归比较难理解,但是能很好的优化代码。
就是说看起来比较容易懂,其他还有什么不同吗? 你的理解基本上是正确的。递归和迭代都是解决重复性工作的两种主要方法,它们各有优势和缺点。
递归有以下特点:
递归能够很直观地描述问题。对于一些问题,用递归能够很自然地描述其解决过程,例如树的遍历、分治算法等。
递归可能会导致额外的空间消耗。因为递归需要将每次调用的环境(包括局部变量等)压入到系统栈中,如果递归的深度很深,可能会耗尽系统栈的空间,导致“栈溢出”。
递归可能会导致额外的时间消耗。因为递归需要不断地进行函数调用,这是一个相对较为耗费时间的操作。另外,如果没有正确地处理递归的终止条件,可能会导致无限递归,从而导致程序无法正常运行。
迭代有以下特点:
迭代通常需要更多的编程技巧。因为需要自己维护重复的状态,所以编程难度通常会比递归要大。
迭代的空间效率通常比递归要好。因为迭代没有函数调用,所以不会有额外的空间消耗。
迭代的时间效率也通常比递归要好。因为迭代没有函数调用,所以不会有函数调用的额外时间消耗。
所以,选择递归还是迭代,需要根据具体的问题和需求来决定。如果问题自然地适合递归描述,并且对效率要求不是特别高,那么可以选择递归;如果对效率要求较高,或者递归深度可能非常深,那么可以选择迭代。在实际编程中,我们也常常会将递归转化为迭代,以获取更好的效率。
页:
[1]