任何事情都是一分为二的,递归虽然有许多诸如解决复杂问题、缩短程序代码、提高变成效率等优点,但是它也有许多致命的弱点。
可以想象,递归调用的过程可能象一个无底深渊,永远不能返回。我们知道函数在调用另一个函数时,需要把原来的函数的局部变量、返回地址等压入堆栈(即所谓的保留现场),以达到正常返回和继续执行。在一个函数进行递归调用时,每一次调用它本身,就象调用一个新的函数一样,他的所有的局部变量都要在内存中保留一份(即压栈),如果递归调用地层次过多甚至无休止的进行递归调用,将耗尽系统资源(栈满),出现“堆栈溢出错误”。因此无意识的使用递归是极易出错的。
我们了解了递归的特点之后,要避免这些问题并不是很困难的,关键要注意以下两点:
1.为防止递归的无休止调用,在递归函数中要及时返回,这就是结束条件的作用。我们应当看到,在所有的递归函数中都有一个终止递归的条件判断。
2.递归函数可以简化程序,但一般不能提高程序的执行效率。直接递归函数要不断的调用自身,而间接递归会调用两个或更多的函数,这样对内存的占用是相当巨大的,因才在递归函数中应尽量少用局部变量。
http://classroom.bua.edu.cn/class/%E9%80%92%E5%BD%92%E5%87%BD%E6%95%B0/htmls/dgrd.htm
分享到:
相关推荐
#### 注意事项 虽然递归在构建树形结构时非常有用,但也需要注意避免无限递归的情况发生。在上面的例子中,`AddReplies`方法最终会因为没有满足过滤条件的数据行而自然停止递归。然而,在实际开发中,应当确保递归...
10. **注意事项**:递归可能导致栈溢出,尤其是在没有正确设置终止条件或者问题规模过大的情况下。在编写递归代码时,应确保理解递归调用的过程,并对递归深度有所控制。 通过学习“acm递归算法总结”,参赛者可以...
### 递归的注意事项 虽然递归是一种强大的技术,但过度使用或不当使用递归可能导致性能问题。递归函数可能会导致大量的函数调用,从而消耗大量内存并可能引起栈溢出。因此,在设计递归算法时,必须注意优化和避免...
5. **注意事项** 递归查询可能导致无限循环,所以在设计递归查询时必须设置好终止条件,例如限制查询深度。同时,对于大规模数据,递归可能会消耗大量内存,因此需谨慎处理。 综上所述,通过合理设计实体关系,...
六、注意事项与优化 1. 避免无限循环:确保递归查询有一个明确的终止条件,否则可能导致无限循环。 2. 性能考虑:递归查询可能会消耗大量资源,特别是当树非常深或者数据量大时。考虑是否可以通过其他方式(如预计算...
#### 六、递归的局限性与注意事项 尽管递归是一种强大的工具,但它也有一些局限性和需要注意的地方: 1. **性能问题**:递归可能会导致大量的函数调用,从而增加系统的开销。 2. **栈溢出**:如果递归层次过深,...
下面我们将深入探讨VB6.0中递归调用的原理、实现方法、优缺点以及注意事项。 1. **递归原理** 递归调用的核心在于函数或过程的自我复制和调用。每次调用都会创建一个新的堆栈帧(stack frame),用于存储局部变量...
#### 七、注意事项 1. **性能问题**:递归查询可能会导致大量的磁盘I/O操作,特别是在数据量很大的情况下。因此,在设计递归查询时需要注意优化查询逻辑,减少不必要的数据访问。 2. **递归深度限制**:大多数...
#### 五、递归注意事项 虽然递归方法可以使代码更加简洁,但在使用时需要注意以下几点: 1. **性能问题**:递归可能会导致大量的重复计算,从而降低效率。 2. **栈溢出**:如果递归深度过大,可能会导致栈溢出错误...
#### 三、递归实现的注意事项 1. **避免无限递归**:确保每个递归调用都会逐步接近基本情况,否则会导致栈溢出。 2. **性能考虑**:虽然递归简洁易懂,但过多的递归调用会占用大量的栈空间,影响程序性能。对于大型...
在编程实践中,尤其是在 PHP 开发中,遵循一定的代码编写注意事项能显著提升代码的效率和可维护性。以下是一些关键的点,可以帮助你优化代码: 1. **利用内置函数**:PHP 提供了大量的内置函数,它们经过优化,执行...
5. **递归的注意事项** - 设计递归函数时,必须清楚地定义基本情况,这是递归的出口。 - 避免无限制的递归,确保每次递归调用都能向基本情况靠近。 - 注意栈溢出问题,如果递归深度过大,可能导致调用栈耗尽。 6...
3. **效率与注意事项**: - **栈空间**:递归可能导致栈空间的大量使用,因为每个递归调用都会在栈上创建一个新的帧。如果递归深度过大,可能会导致栈溢出。 - **优化**:对于可以转换为非递归的算法,考虑使用...
5. **注意事项**: - JSON文件的结构应与数据库表结构匹配,以确保数据能正确插入。 - 递归深度可能会受到限制,对于大型数据,可能需要考虑非递归的迭代方法。 - 数据库操作需考虑事务处理,确保数据的一致性和...
在Java编程中,安全注意事项包括: 1. **使用访问器方法**:避免使用公共变量,通过getter和setter方法控制访问。 2. **安全控制**:对所有可能访问或修改敏感内部状态的公共方法添加安全控制。 3. **包保护成员...
5. **注意事项** - 在实际应用中,可能需要处理异常,例如当没有读取权限或者路径不存在时。 - 为了提高性能,可以在添加节点前进行必要的筛选,避免不必要的递归操作。 - `TreeView`控件的性能可能受到大量节点...
### 使用C语言实现递归调用 #### 一、递归的基本概念 递归是一种算法设计方法,在这种方法中,函数直接或间接地调用自身。...在学习和应用递归的过程中,注意把握好递归的基本原则和注意事项是非常重要的。
4. `readme.txt`: 通常,这是一个包含项目说明、使用指南或注意事项的文本文件。在本例中,它可能解释了如何运行示例程序以及如何理解和修改代码。 5. `Find all files demo project.vbp`和`Find all files demo ...
本篇文章将深入探讨Python中的递归基础知识,包括递归的工作原理、递归函数的定义、注意事项以及一些实例。 1. **递归工作原理** 递归的核心思想是函数在其内部调用自身,每次调用都基于更小规模的问题进行。这个...
三、递归注意事项 1. **递归基础**:每个递归函数必须有一个或多个终止条件,即当满足特定条件时停止递归。否则,程序将陷入无限循环。 2. **效率与栈溢出**:虽然递归方便理解,但过多的递归调用可能导致栈溢出。...