本篇内容来自网络以及自己接触到的一些内容,尚未整理!
JAVA递归算法
递归算法:是一种直接或间接调用自身方法或函数的算法.JAVA递归算法就是基于JAVA语言实现的递归算法.
递归的实质就是把复杂的问题分析为若干个相对简单的子问题,一直分解下去,直到子问题有答案为止,也就是说到了递归的出口.递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解.
递归算法的特点:
1.递归就是方法里调用自身.
2.在使用递归时,必须有一个明确的递归出口,也就是结束递归的条件.
3.递归算法通常显得很简洁,但递归算法解题的运行效率较低,所以一般不提倡使用递归算法设计程序.
4.在递归调用的过程中,系统为第一层的返回点,局部变量等开辟了栈来存储.递归次数过多容易造成栈溢了,所以一般不提但是用递归算法设计程序.
递归算法所体现的“重复”一般有三个要求:
一是每次调用在规模上都有所缩小(通常是减半);
二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);
三是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将会成为死循环而不能正常结束。
java递归算法实例一: 求解Fibonacci数列的第10个位置的值?
问题描述:求解Fibonacci数列的第10个位置的值?(斐波纳契数列(Fibonacci Sequence),又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*))
java递归算法实例二: 求从1加到5的或者求5的阶乘.
/** * java递归:求从1加到5的和 */ public class RecursionTest { //递归算法 public static int sum(int n){ if(n==1){ return 1; }else{ return n+sum(n-1); } } public static void main(String[] args) { System.out.println(sum(5)); } }
先分析一下执行的流程:
n=5时,执行sum(5)方法,返回的结果为:5 + sum(4)
n=4时,执行sum(4)方法,返回的结果为:4 + sum(3)
n=3时,执行sum(3)方法,返回的结果为:3 + sum(2)
n=2时,执行sum(2)方法,返回的结果为:2 + sum(1)
n=1时,执行sum(1)方法,返回的结果为:1
再向上返回,依次执行:
2+1
3+(2+1)
4+(3+2+1)
5+(4+3+2+1) = 15
思路应该是这样的:
要知道从1加到5的和,先得知道从1加到4的和,即:5+sum(4)
要知道从1加到4的和,先得知道从1加到3的和,即:4+sum(3)
要知道从1加到3的和,先得知道从1加到2的和,即:3+sum(2)
要知道从1加到2的和,先得知道从1加到1的和,即:2+sum(1)
从而很容易看出,递归的出口为1也就是sum(1)的值为1
再看一个例子,求5的阶乘,代码如下:
/** * java递归算法:求5的阶乘. */ public class RecursionTest01 { //求n的阶乘 public static int multiply(int n){ if(n==1){ return 1; }else{ return n*multiply(n-1); } } public static void main(String[] args) { System.out.println(multiply(5)); } }java递归算法实例三:深度遍历目录文件:
package io; import java.io.File; /* * 需求:对指定的目录进行所有内容的列出(包含子目录中的内容),也可以理解为深度遍历. * 注意不要去遍历:C盘因为它里边有许多系统目录,没有权限访问,会产生空指针, * 也不要遍历其他系统根目录如d:\\或e:\\因为:它们之中如果有系统文件也会产生空指针. * */ public class _18Filetest { public static void main(String[] args) { File dir=new File("D:\\Music"); listAll(dir,0); } /* 深度遍历文件夹:按如下的格式输出. * * |--Music * | |--KwDownload.txt * | |--L-聆听 * | | |--100413 * | | | |--002-I believe I can fly.lrc * | | | |--002-I believe I can fly.mp3 * */ private static void listAll(File dir,int level) { System.out.println(getSpace(level)+dir.getName()); level++; //获取指定目录下当前的所有文件夹或者文件对象. //listFiles()方法返回的是File对象,对象中封装了许多有用信息.而list只得到String类型的文件名. //listFiles()方法返回的时当前目录下的所有文件和目录对象,所以要想深度遍历必须使用递归调用. File[] files=dir.listFiles(); //对于数组的遍历如果不想操作脚标就使用foreach.如果想就使用for. for(int i=0;i<files.length;i++){ if(files[i].isDirectory()){ listAll(files[i],level); }else{ System.out.println(getSpace(level)+files[i].getName()); } } } private static String getSpace(int level){ StringBuilder sb=new StringBuilder(); sb.append("|--"); for(int i=0;i<level;i++){ sb.insert(0, "| ");//在字符串的最前面加入"| " } return sb.toString(); } }
相关推荐
Java 递归算法构造 JSON 树形结构 Java 递归算法构造 JSON 树形结构是指通过 Java 语言使用递归算法将数据库中的菜单表构建成树形的 JSON 格式发送给第三方。这种方法可以将复杂的树形结构数据转换成易于理解和处理...
java递归算法,java递归算法,java递归算法
Java递归算法是一种重要的编程技巧,它通过函数自身调用自身来解决问题。在Java中,递归主要用于解决那些可以通过简化规模来逐步逼近解决方案的问题。这种技术在数据结构(如树和图)、排序算法(如快速排序和归并...
Java 递归算法 Java 递归算法是指一个函数通过调用自身来解决问题的过程。这种算法通常用于解决可以被分解成相同问题的子问题的问题。它是一种非常强大的技术,可以用于解决许多计算问题,例如搜索,排序和数据结构...
Java 递归算法浅谈 Java 递归算法是 Java 编程中的一种常见算法,通过自调用函数实现复杂问题的解决。下面是 Java 递归算法的相关知识点。 一、递归函数的定义 递归函数是指在函数体内直接或间接地调用自己,即...
Java 递归算法遍历部门代码示例 Java 递归算法遍历部门代码示例是指使用 Java 语言实现的递归算法来遍历部门树结构的示例代码。该示例代码主要用于介绍如何使用 Java 递归算法来遍历部门树结构,具有较高的借鉴价值...
### Java编写的递归算法的经典事例:全排列输出 #### 概述 本文将详细介绍一个用Java编写的递归算法实例,该实例用于实现字符数组的所有可能全排列。通过这个例子,我们可以深入理解递归的基本概念、工作原理以及...
Java递归算法简单示例两则 Java递归算法是一种常用的算法设计方法,通过将问题分解为小问题,逐步解决,小问题的解决方法和大问题的解决方法相同,这样可以将复杂的问题简化为简单的问题。Java递归算法广泛应用于...
Java递归算法是一种重要的编程技巧,它通过函数或方法直接或间接地调用自身来解决问题。在Java中,递归通常用于简化复杂的问题,并且在数据结构(如树和图的遍历)、数学计算(如斐波纳契数列)等领域有着广泛应用。...
Java 递归算法实例详解 Java 递归算法是一种编程技术,通过函数的自我调用实现问题的解决。递归算法的实例详解中,我们将通过四个实例详细讲解 Java 递归算法的应用和原理。 一、递归算法的原理 递归算法的核心是...
递归算法和非递归算法 在计算机科学与编程领域中,递归算法与非递归算法是两种非常重要的计算方法。本文将详细介绍这两种算法的特点、应用场景以及如何实现它们,特别针对初学者及面试准备者。 #### 递归算法 ...
数据存储结构未多级时,查询某一级以下的数据时,通过递归算计可以取出所需要的数据
### 数据结构与算法(JAVA篇)之递归算法 #### 概念介绍 递归算法是一种常见的编程技术,尤其在解决具有重复子问题的问题时非常有效。递归算法的特点是函数自身调用自身来解决问题的不同部分,直到达到基本情况...
Java递归算法是一种编程技术,它允许函数或方法在执行过程中调用自身。这种自调用的方式使得递归成为解决复杂问题的有效工具,尤其是那些可以通过分解成相同或相似子问题来解决的问题。在Java中,理解和正确使用递归...
今天,我们将讨论Java基于递归算法实现汉诺塔问题的实例,帮助读者更好地理解Java递归算法的实现和使用技巧。 一、汉诺塔问题简介 汉诺塔问题是一个经典的数学问题,源于印度古代的传奇故事。该问题的描述是:有三...
Java二分查找递归算法
### Java 数组递归算法的复杂度 #### 内容概览 本文主要探讨了Java中几种常见的排序算法(冒泡排序、选择排序、插入排序、希尔排序)以及递归算法的时间复杂度分析。通过具体代码示例和理论分析,帮助读者理解不同...