鱼C论坛

 找回密码
 立即注册
查看: 5020|回复: 3

[已解决]关于递归和迭代的理解

[复制链接]
发表于 2016-5-3 16:04:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
个人理解:递归调用自己的函数,占用内存较多,计算耗费时间多;
                迭代则编程较为复杂,但一旦编程好,计算效率高。所以正确运用递归很重要。
这么理解对不对?请过来人回答一下
最佳答案
2023-12-3 00:50:13
你的理解基本上是正确的。递归和迭代都是解决重复性工作的两种主要方法,它们各有优势和缺点。

递归有以下特点:

递归能够很直观地描述问题。对于一些问题,用递归能够很自然地描述其解决过程,例如树的遍历、分治算法等。
递归可能会导致额外的空间消耗。因为递归需要将每次调用的环境(包括局部变量等)压入到系统栈中,如果递归的深度很深,可能会耗尽系统栈的空间,导致“栈溢出”。
递归可能会导致额外的时间消耗。因为递归需要不断地进行函数调用,这是一个相对较为耗费时间的操作。另外,如果没有正确地处理递归的终止条件,可能会导致无限递归,从而导致程序无法正常运行。
迭代有以下特点:

迭代通常需要更多的编程技巧。因为需要自己维护重复的状态,所以编程难度通常会比递归要大。
迭代的空间效率通常比递归要好。因为迭代没有函数调用,所以不会有额外的空间消耗。
迭代的时间效率也通常比递归要好。因为迭代没有函数调用,所以不会有函数调用的额外时间消耗。
所以,选择递归还是迭代,需要根据具体的问题和需求来决定。如果问题自然地适合递归描述,并且对效率要求不是特别高,那么可以选择递归;如果对效率要求较高,或者递归深度可能非常深,那么可以选择迭代。在实际编程中,我们也常常会将递归转化为迭代,以获取更好的效率。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-5-3 16:28:06 | 显示全部楼层
递归比较难理解,但是能很好的优化代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-3 16:32:33 | 显示全部楼层
康小泡 发表于 2016-5-3 16:28
递归比较难理解,但是能很好的优化代码。

就是说看起来比较容易懂,其他还有什么不同吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-3 00:50:13 | 显示全部楼层    本楼为最佳答案   
你的理解基本上是正确的。递归和迭代都是解决重复性工作的两种主要方法,它们各有优势和缺点。

递归有以下特点:

递归能够很直观地描述问题。对于一些问题,用递归能够很自然地描述其解决过程,例如树的遍历、分治算法等。
递归可能会导致额外的空间消耗。因为递归需要将每次调用的环境(包括局部变量等)压入到系统栈中,如果递归的深度很深,可能会耗尽系统栈的空间,导致“栈溢出”。
递归可能会导致额外的时间消耗。因为递归需要不断地进行函数调用,这是一个相对较为耗费时间的操作。另外,如果没有正确地处理递归的终止条件,可能会导致无限递归,从而导致程序无法正常运行。
迭代有以下特点:

迭代通常需要更多的编程技巧。因为需要自己维护重复的状态,所以编程难度通常会比递归要大。
迭代的空间效率通常比递归要好。因为迭代没有函数调用,所以不会有额外的空间消耗。
迭代的时间效率也通常比递归要好。因为迭代没有函数调用,所以不会有函数调用的额外时间消耗。
所以,选择递归还是迭代,需要根据具体的问题和需求来决定。如果问题自然地适合递归描述,并且对效率要求不是特别高,那么可以选择递归;如果对效率要求较高,或者递归深度可能非常深,那么可以选择迭代。在实际编程中,我们也常常会将递归转化为迭代,以获取更好的效率。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 07:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表