其基本思路是递归算法设计:对于一个复杂的问题,原问题分为几个子问题相似相对简单。继续下去,直到孩子可以简单地解决问题,这是导出复发,因此,有复发的原始问题已经解决。
关键是要抓住:
(1)递归出口
(2)地推逐步向出口逼近
样例:
example: 求5的阶乘。。      
  
例如以下:

  1. public class Test {
  2. static int multiply(int n){
  3. if(n==||n==)
  4. return n;
  5. else
  6. return n*multiply(n-);
  7. }
  8. public static void main(String[] args){
  9. System.out.println(multiply());
  10. }
  11. }
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,没有不论什么编程基础,各位高手见笑。

  1. public class Count
  2. {
  3. static void count(int n)               //递归方法
  4. {
  5. if (n<)
  6. count(n+);
  7. System.out.print("     "+n);
  8. }
  9. public static void main(String args[])
  10. {
  11. count();
  12. System.out.println();
  13. }
  14. }
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);

Java 递归算法的更多相关文章

  1. java递归算法提前返回值带出

    /** * */ package testJava.java.foreach; import java.util.ArrayList; import java.util.LinkedList; imp ...

  2. Java递归算法——三角数字(消除递归)

    import java.io.*; // for I/O //类名:Params //属性: //方法: class Params //这个类的对象被压入栈中 { public int n; //用来 ...

  3. 转: JAVA递归算法实例小结

    一.递归算法设计的基本思想是: 对于一个复杂的问题,把原问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到能够直接求解,也就是说到了递推的出口,这样原问题就有递推得解. 在做递归算法的时候 ...

  4. Java递归算法——二分查找

    import java.lang.reflect.Array; import java.nio.Buffer; import java.util.Arrays; import java.util.Ra ...

  5. Java递归算法——变位字

    轮换的含义 1.c ats --> 2.ca st 3.c tsa --> 4.ct as 5.c sat --> 6.cs ta 7. atsc import java.io.Bu ...

  6. Java递归算法——阶乘

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.i ...

  7. Java递归算法——三角数字

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.i ...

  8. JAVA递归算法

    1.什么是递归算法 递归算法就是直接或间接调用自己的算法 2.问题1:一列数的规则如下: 1.1.2.3.5.8.13.21.34 ,求第30位数是多少?使用递归实现 public class Fib ...

  9. Java 递归算法,遍历文件夹下的所有文件。

    用递归算法遍历文件下的所有子文件夹和子文件 文件夹遍历方法 public void getFileList(String strPath){ File f=new File(strPath); try ...

随机推荐

  1. 【SQL】Oracle的PL/SQL语法及其拓展数据类型总结

    PL/SQL语法 PL/SQL程序由三部分组成,声明部分.执行部分.异常处理部分. 模板: DECLARE /*变量声明*/ BEGIN /*程序主体*/ EXCEPTION /*异常处理部分*/ E ...

  2. localStorge它storage事件

    随着h5患病率和mobile发展.localStorage它不再是一个陌生的词汇.我相信大多数童鞋进行了联系,并用它.但storage事件相信有很多童鞋不清晰甚至没有接触.今天我们主要谈storage ...

  3. HDU 5095 Linearization of the kernel functions in SVM(模拟)

    主题链接:http://acm.hdu.edu.cn/showproblem.php? pid=5095 Problem Description SVM(Support Vector Machine) ...

  4. OpenNMS在安装”我找不到jrrd.dll“错误的解决方法

    在Windows 2003 Server(虚拟机)安装OpenNMS.找不到jrrd.dll错误.尝试从学习OpenNMS官网下载jrrd-1.0.7.tar.gz,我们没有发现标dll文件,编译需要 ...

  5. Scut游戏server引擎Unity3d访问

    Scut提供Unity3d Sdk包.便利的高速发展和Scut游戏server对接: 看Unity3d示为以下的比率: 启动Unity3d项目 打开Scutc.svn\SDK\Unity3d\Asse ...

  6. NSIS:在线下载并安装程序

    原文 NSIS:在线下载并安装程序 看到有同学留言说需要这方面的代码,所以贴出以下代码供参考(非完整脚本).需要用NSISdl插件. Section -.NET Framework    NSISdl ...

  7. NSIS:检查某注册表键是否存在

    原文NSIS:检查某注册表键是否存在 ;定义注册表主键!define HKEY_CLASSES_ROOT           0x80000000!define HKEY_CURRENT_USER   ...

  8. 【MongoDB】在windows平台mongodb切片集群(三)

    在过去的两年我们博客详细阐述了零碎工作集群和打造过程.在这篇博客中,我们主要分析测试结果一起支离破碎集群. 首先来看看碎片集群的每个状态.你可以看出来复制集A和B都是正常的: 一.开启分片集合 开启一 ...

  9. emacs quick open and jump file (or buffer) which name is current word

    Sometime, we need to open a file or buffer which name begin with current word in emacs. Here I give ...

  10. 求N!末尾的0的个数(找规律+递归)

    0\'s Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 计算整数n!(n的阶乘)末尾有多少个0. 输入 第一行输入一个数T代 ...