`
zdsyouxiang
  • 浏览: 26133 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

递归的要点

阅读更多

递归算法

优点

递归是非常有效的算法实现形式,在小规模运算的情况下是很有效的,代码直观。

经典的二分查找算法的递归实现如下:

public static int rank3(int key ,int[] a){
     return rank3(key,a,0,a.length -1);
}
/**递归的要点:
* 1:递归总有一个最简单的情况,方法的第一句总是包含一个带条件的返回语句
* 2 递归调用总是收缩的,尝试解决一个规模更小的问题,这样递归才能收敛到最简单的情况
* 3:递归调用的父问题和尝试解决的子问题之间不应该有交集
*/
public static int rank3(int key,int[] a,int low,int hi){
     if(low>hi) return -1;
     int mid = low + (hi-low)/2;
     if(key>a[mid]){low = mid+1; return rank3(key,a,low,hi);}
     else if(key<a[mid]){hi = mid -1; return rank3(key,a,low,hi);}
     else {
       return mid;
     }
  }

 递归的缺点:

    递归主要利用栈内存进行计算,java 的栈内存是有限制的。可通过下面两个方式进行控制

public Thread(ThreadGroup group, Runnable target, String name,  
                  long stackSize) {  
    init(group, target, name, stackSize);  
}  

  当然也可以通过JVM启动参数来指定。XX:ThreadStackSize=<value>:设置线程的栈大小(字节数)(0表示 默认) [Sparc: 512, Solaris Intel: 256, Sparc 64bit: 1024 all others 0]

递归的优化 

    参见博客:http://www.cnblogs.com/wb-DarkHorse/archive/2013/11/15/3284228.html

 

 

 

分享到:
评论

相关推荐

    python实现汉诺塔--递归(csdn)————程序.pdf

    递归要点: 1. **明确的结束条件**:在本例中,结束条件是当 n 等于 1 时,即只剩下一个盘子时,可以直接移动到目标位置。 2. **递归调用**:在 n 大于 1 的情况下,问题被分解为两个较小的子问题,分别是将 n-1 个...

    递归下降分析子程序方法实验

    递归下降分析是编译器设计中一种常用的技术,主要用于实现词法分析后的语法分析阶段。这种分析方法基于上下文无关文法(Context-Free Grammar, CFG),特别是使用扩展巴科斯范式(Extended Backus-Naur Form, EBNF)...

    递归的解决最近问题

    根据给定的信息,本文将详细解析递归在C语言中的应用及其实现方式,并通过一个具体实例来深入探讨递归的思想和技术要点。 ### 一、递归的基本概念 递归是一种解决问题的方法,它通过调用自身来求解问题。递归通常...

    递归程序设计方法.pdf

    在本篇文章中,我们将深入探讨递归程序设计的要点,并通过斐波那契数列的例子来进一步阐述。 1. **递归特性与问题解决**: 当面临的问题可以分解成相同或相似的子问题时,通常会考虑使用递归。递归设计的策略是将...

    循环递归算法设计.pdf.ppt

    在本章中,我们将深入探讨循环与递归的设计要点,以及如何利用它们优化算法效率。 首先,让我们关注循环设计。循环是程序设计的基础,通过循环可以实现重复执行某段代码的操作。在设计循环时,有两个关键点需要注意...

    算法递归与分治

    递归的要点在于正确地定义基本情况和递归情况,以及确保在有限步骤内终止,避免无限循环。 接下来是“分治”策略。分治法是一种处理复杂问题的有效方法,它将大问题分解为相互独立或相似的子问题,然后对子问题进行...

    算法 格雷码 递归算法

    三. 该类算法设计与实现的要点 1. 递归关系(特性):产生递归的基础。 当算法中某步骤要通过解性质相同的子问题实现时,该步骤用递归调用实现。 2. 递归出口(结束条件):确定递归的层数。 当子问题的规模充分...

    数据结构中递归算法的教学要点及方法探讨.pdf

    在数据结构的教学中,递归算法是核心内容之一。递归算法在描述概念和设计算法的过程中应用广泛,其重要性体现在以下几个方面: 1. 概念理解:在数据结构中,许多基本概念的定义都采用递归的形式。例如,广义表、...

    循环递归算法设计.ppt

    递归设计要点主要在于理解和定义好基本情况以及递归情况。在递归过程中,函数调用自身并逐步缩小问题规模,直到达到某个基础情况,这时不再进行递归调用,而是直接返回结果。递归算法通常简洁优雅,但需要注意避免...

    递归程序的非递归化研究

    ### 递归程序的非递归化研究:深入解析与技术要点 #### 一、递归与非递归算法的概念及对比 递归算法是一种直接或间接调用自身的算法,其核心思想在于将复杂问题分解为更小的相似子问题,并通过解决这些子问题来...

    mfc实现汉诺塔递归

    2、要点分析 本题主要涉及到的知识点有:鼠标消息、菜单、定时器。同时也需要有部分画笔/画刷使用,显示文字等工作,难度适中。 该题的难点在于数据结构和移动算法,涉及到递归和集合类(容器)使用,以及在定时器和...

    C递归遍历目录.txt

    通过以上分析,我们可以看到这段代码实现了一个基本的递归遍历目录的功能,可用于学习和理解递归遍历的基本原理和技术要点。对于实际项目开发而言,还需要进一步完善错误处理、优化性能等方面。

    郝斌老师对递归的讲解和举例。让你不再为递归烦恼

    郝斌老师c语言听课完整笔记,关于递归的一些讲解,对课上的要点基本都加以总结了。

    c++指针与递归的详细剖析

    理解递归的关键在于掌握以下几个要点: 1. **基本条件**:每个递归函数都应有至少一个或多个基础条件(base case),当满足这些条件时,函数不再调用自身,而是直接返回结果。 2. **递归步骤**:如果当前条件不满足...

    C 语言程序设计:递归与分治策略.ppt

    学习要点: * 理解递归的概念 * 掌握设计有效算法的分治策略 * 通过下面的范例学习分治策略设计技巧 * 二分搜索技术 * 合并排序和快速排序 * 线性时间选择 递归的概念: 递归是一种算法设计技术,通过将问题分解...

    Scratch递归程序设计的教学探讨.pdf

    Scratch 递归程序设计的教学探讨可以通过对递归算法原理的分析,提出抓住三个要点及构造递归表达式的学习方法,并结合 Scratch 编程风格,提出基于 Scratch 的递归算法教学引导思路,并分析探讨更有效的递归教学...

    递归方法示例

    #### 四、递归方法的使用要点 1. **避免无限递归**:确保每次递归调用都能向基本情况靠近,否则会导致无限递归,最终可能引起栈溢出错误。 2. **性能考虑**:递归虽然简洁易懂,但过多的递归调用可能导致较大的栈...

    循环与递归算法实验.doc

    通过本实验,学生将熟练掌握循环和递归的设计要点,清楚循环和递归的异同,并学会利用循环、递归算法解决实际问题。 二、实验容 本实验共包括三个题目,分别是: 1. 打印图形编写程序:根据参数 n 打印具有某种...

    栈的数据结构与递归算法.pdf

    #### 设计递归算法的要点: - **递归函数的参数**:应该能够逐步缩小问题的规模。 - **递归终止条件**:必须明确,否则算法可能永远不会结束。 - **效率问题**:递归算法可能会增加调用栈的大小,对于深度递归可能...

    C语言函数的递归和调用实例分析

     要点: 1、C语言函数可以递归调用。 2、可以通过直接或间接两种方式调用。目前只讨论直接递归调用。 二、递归条件  采用递归方法来解决问题,必须符合以下三个条件: 1、可以把要解决的问题转化为一个新问题,...

Global site tag (gtag.js) - Google Analytics