递归算法设计的基本思想是:对于一个复杂的问题,把原问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到能够直接求解,也就是说到了递推的出口,这样原问题就有递推得解。
关键要抓住的是:
(1)递归出口
(2)地推逐步向出口逼近
例子:
example: 求5的阶乘。。
如下:
public class Test {
static int multiply(int n){
if(n==1||n==0)
return n;
else
return n*multiply(n-1);
}
public static void main(String[] args){
System.out.println(multiply(10));
}
}
上面的multiply是一个阶乘的例子。其实递归递归,从字面上解释就是在方法本身调用自己的方法,或者间接调用;看上面的程序,拿multiply(5)来说:
n=5;执行 5*multiply(4);
--------------------
这时候看multiply(4)
n=4 执行 4*multiply(3);
-------------------
看multiply(3)
n=3,执行 3*multiply(2);
---------------
mulitply(2);
n=2 执行 2*mulitply(1);
这时候,return 1;往上返回
2*1向上返回
3*(2*1)向上返回
4*(3*(2*1)) 向上返回
5*(4*(3*(2*1)) ) = 120
所以程序输出120;
这事简单的递归的例子;所以可以看出来递归的关键得有递归出口(本体的If语句),还有递归方法;
以下是我在百度知道碰到一个朋友的提问,也是关于递归算法的:
------------------------问题------------------------------
本人刚学JAVA,没有任何编程基础,各位高手见笑。
public class Count
{
static void count(int n) //递归方法
{
if (n<5)
count(n+1);
System.out.print(" "+n);
}
public static void main(String args[])
{
count(1);
System.out.println();
}
}
请详细讲解这段程序是怎么执行的,我的理解是先执行main函数里的count(1),然后进入count方法,N值为1,所以执行IF语句,直到count(5),此时退出if 循环,打印N=5 ,然后应该没有要执行的东西了,可是答案是5 4 3 2 1 ,请问这是怎么回事,谢谢!
--------------------回答---------------------------
先执行count(1),然后进入count方法,N值为1,所以执行IF语句,也就是执行count(2),然后进入count方法,N值为2,所以执行IF语句,也就是执行count(3),然后进入count方法,N值为3,所以执行IF语句,也就是执行count(4),然后进入count方法,N值为4,所以执行IF语句,也就是执行count(5),然后进入count方法,N值为5,所以不执行IF语句,然后执行System.out.print(" "+n); 也就是输出5,然后本次参数为5的count方法调用结束了,返回到调用它的参数为4的count方法中,然后执行System.out.print(" "+n);输出4,然后一直这样下去,输出3,2,1 。这里需要说明的是在执行count(5)的时候,count(4)、count(3)、count(2)、count(1)都没有执行完毕,他们都在等自己方法体中的count(n+1)执行完毕,然后再执行System.out.print(" "+n);
分享到:
相关推荐
实现一个递归下降语法分析程序 识别用户输入的算术表达式 文法如下: E TE E’ +TE’| TE’|e T FT T’ FT’| FT’|e F E |i
这篇“java 递归问题文档”很可能是对递归的深入讲解和实例分析,旨在帮助初学者理解和掌握这一关键技能。 首先,我们需要理解递归的基本原理。递归函数通常包含两个主要部分:基本情况(base case)和递归情况...
"Java递归算法.pdf"可能详细介绍了递归的理论基础,包括递归的时间复杂度和空间复杂度分析。递归可能导致较大的栈空间消耗,因此在设计递归算法时需要考虑效率问题,避免栈溢出。对于时间复杂度,如果每次递归调用都...
用java语言编写的递归下降语法分析器用java语言编写的递归下降语法分析器用java语言编写的递归下降语法分析器
在编程领域,语法分析是...导入到Eclipse工程后,你可以查看并学习如何在Java中实现递归下降法来构建一个语法分析器。通过阅读和理解代码,你将能更好地掌握递归下降法的概念,并可能将其应用于自己的编程项目中。
本篇主要介绍的是使用Java编写的一个递归下降分析程序,这种解析方法是编译器设计中的常见技术之一。 递归下降分析,又称自顶向下解析,是一种基于上下文无关文法(Context-Free Grammar, CFG)的解析策略。它的...
在Java编程语言中,递归是一种强大的...通过以上分析,我们可以看到Java中的递归在处理文件和目录删除任务时的强大和灵活性。掌握这些关键知识点,将有助于开发人员更有效地管理和操作文件系统,特别是在复杂的项目中。
本文将详细解析几个典型的JAVA编程递归题目,包括阶乘计算、摘桃子问题、斐波那契数列以及汉诺塔问题,通过实例代码分析递归的应用与实现。 #### 1. 阶乘计算 阶乘是数学中的一个基本概念,表示为`n!`,其定义为...
编制语法分析程序,要求能将词法分析输出的单词文件用给定的语法规则书写的源程序进行语法分析,输出相应的语法分析结果和错误信息。 关于错误信息:不要求错误种类,只需给出出错位置. 简单的表达式文法如下: E...
### Java编写的递归算法的经典事例:全排列输出 #### 概述 本文将详细介绍一个用Java编写的递归算法实例,该实例用于实现字符数组的所有可能全排列。通过这个例子,我们可以深入理解递归的基本概念、工作原理以及...
### Java中的递归详解 #### 一、递归的基本概念 在Java编程语言中,递归是一种非常重要的算法思想和技术手段。递归是指一个方法直接或间接地调用自身的过程。这种自我调用的方式可以用来解决很多复杂的问题,并且...
1、使用递归下降分析算法分析表达式文法: exp ::= exp addop term | term addop ::= + | - term ::= term mulop factor | factor mulop ::= * | / factor ::= (exp) | number 其中number可以是多...
在本项目中,我们探讨的是一个使用Java语言实现的完整词法分析器和递归下降语法分析程序,该程序集成了图形用户界面(GUI),能够方便地读取和处理源代码文件。 词法分析器,也称为扫描器或词法器,其主要任务是将...
本文将深入探讨如何利用递归子程序来实现这一过程,并在分析过程中打印出语法分析树,以帮助我们更好地理解和调试编译器。 首先,我们需要理解自顶向下的语法分析策略。这种分析方法是从文法规则的起始符号开始,...
一个关于递归下降语法分析器设计的文档
通过上述分析,我们可以看到该无限级树形结构使用Java递归方式实现了动态构建树形结构的功能,并通过前端脚本实现了交互效果。虽然代码可能存在一定的优化空间,但对于理解和实现递归算法构建树形结构具有很好的参考...
本文主要探讨了Java中几种常见的排序算法(冒泡排序、选择排序、插入排序、希尔排序)以及递归算法的时间复杂度分析。通过具体代码示例和理论分析,帮助读者理解不同排序算法的特点及其在实际应用中的性能表现。 ##...
实验二 语法分析—(1)递归下降分析法 程序输入/输出示例: 对下列文法,用递归下降分析法对任意输入的符号串进行分析: (1)E->eBaA (2)A->a|bAcB (3)B->dEd|aC (4)C->e|dC 输出的格式如下: (1)递归...
5. **Java源码分析**:在`recursionBuildTree`这个文件名中,我们推测可能包含一个名为`recursionBuildTree`的函数,这是实现递归构建树的核心方法。该方法可能接收数据库查询结果作为输入,逐行处理数据,为每个...