递归算法设计的基本思想是:对于一个复杂的问题,把原问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到可以直接求解,也就是说到了递推的出口,这样原问题就有递推得解。
关键要抓住的是:
(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利用递归算法统计1-6的数组排列组合数

    Java利用递归算法统计1-6的数组排列组合数 1.设计源码 /** * @Title:ArrayCombination.java * @Package:com.you.data * @Descrip ...

  2. java:递归算法

    JAVA中的递归是只一个方法在(满足条件时(或不满足条件时[这里的判断根据业务的实际需求写]))自己调用自己的方法名,要求参数和方法名一致, 然后根据判断跳出该方法,返回相应的返回值! 实例: 我们要 ...

  3. Java修炼——递归算法的俩个实例

    1.是输出指定文件目录下的所以子目录以及文件 2.使用递归算算法:1!+2!+3!+4!+5!+-+n!(计算阶乘累加) package com.bjsxt.recurison; import jav ...

  4. Java全排列递归算法

    Java全排列算法: 第一遍循环:将list数组index==0的元素依次与数组的每个元素交换,从而保证index==0的位置先后出现n个不同元素之一,实现对index==0位置的遍历. 第 i 遍循 ...

  5. 30、java中递归算法

    1.已知有一个数列f(0)=1,f(1)=4,f(n+2)=2*f(n+1)+f(n),其中n是大于0的正数,求f(10)的值. 分析:设x=n+2 => f(x)=2*f(n-1)+f(n-2 ...

  6. Java数据结构和算法(四)赫夫曼树

    Java数据结构和算法(四)赫夫曼树 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 赫夫曼树又称为最优二叉树,赫夫曼树的一个 ...

  7. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  8. Java 递归算法

    其基本思路是递归算法设计:对于一个复杂的问题,原问题分为几个子问题相似相对简单.继续下去,直到孩子可以简单地解决问题,这是导出复发,因此,有复发的原始问题已经解决. 关键是要抓住: (1)递归出口 ( ...

  9. 使用递归算法结合数据库解析成java树形结构

    使用递归算法结合数据库解析成java树形结构 1.准备表结构及对应的表数据a.表结构: create table TB_TREE ( CID NUMBER not null, CNAME VARCHA ...

随机推荐

  1. Linux下的绘图(流程图、UML、mindmap)工具

    http://blog.csdn.net/piyajee/article/details/5902380

  2. 板级支持包(BSP)

    板级支持包(BSP)是介于主板硬件和操作系统中驱动层程序之间的一层,一般认为它属于操作系统一部分,主要是实现对操作系统的支持,为上层的驱动程序提供访问硬件设备寄存器的函数包,使之能够更好的运行于硬件主 ...

  3. 综合经验:IO读写错误必然导致程序崩溃

    仿佛是忽然间产生的问题,每次程序退出时候,必然崩溃,花了整整一天才找到原因,就是对数据库的IO读写错误.主要是因为析构函数调用了Disconnect函数,内容如下: void SFTPTool::Di ...

  4. Android java.net.SocketException四大异常解决方案

    java.net.SocketException如何才能更好的使用呢?这个就需要我们先要了解有关这个语言的相关问题.希望大家有所帮助.那么我们就来看看有关java.net.SocketExceptio ...

  5. Linux下Apache与Tomcat的完全分布式集群配置(负载均衡)

    最近公司要给客户提供一套集群方案,项目组采用了Apache和Tomcat的集群配置,用于实现负载均衡的实现. 由于以前没有接触过Apache,因此有些手生,另外在网上搜寻了很多有关这方面的集群文章,但 ...

  6. udelay、mdelay、ndelay、msleep使用比较说明

    时间单位:    毫秒(ms).微秒 (μs).纳秒(ns).皮秒(ps).飞秒(fs).阿秒.渺秒    1 s = 10^3 ms = 10^6 us = 10^9 ns = 10^12 ps = ...

  7. 屏幕尺寸,屏幕分辨率,屏幕密度,各种长宽单位(px,sp,dp,in.pt,mm)

    常见长宽单位表 名称 单位缩写 单位全拼 介绍 屏幕尺寸 '' 或 in inch 屏幕的大小,通常用屏幕对角线的长度表示.单位是寸 屏幕分辨率 px pixels 整个屏幕的像素数,一般用屏幕的像素 ...

  8. bzoj2506

    不知道该给这题贴什么标签了,但是这是一道好题1.注意这道题的询问是满足区间减法的,我们可以把一个询问拆成两个询问离线搞搞,这个思想在后面会见到2.分类的思想,这道题的求相同余数看似很烦,实际上我们发现 ...

  9. ActiveMQ, RabbitMQ和ZeroMQ 选型关注点

    选择MQ时,主要关注的特性,可能就以下几个: 通信模式(是否满足业务场景): ActiveMQ: queue(producer/consumer), topic(publisher/subsriber ...

  10. tyvj P1519 博彩游戏(AC自动机+DP滚动数组)

    P1519 博彩游戏 背景 Bob最近迷上了一个博彩游戏…… 描述 这个游戏的规则是这样的:每花一块钱可以得到一个随机数R,花上N块钱就可以得到一个随机序列:有M个序列,如果某个序列是产生的随机序列的 ...