1、什么是递归算法 递归算法就是直接或间接调用自己的算法2、递归思想 递归就是方法里调用自身 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口 递归算法代码显得很简洁,但递归算法解题的运行效率较低。所以不提倡用递归设计程序。 在递归调用的过程中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。要点: ...
上两篇博客8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,数据结构“栈”实现研究了递归方法实现回溯,解决N皇后问题,下面我们来探讨一下非递归方案实验结果令人还是有些失望,原来非递归方案的性能并不比递归方案性能高代码如下:package com.newflypig.eightqueen;import java.util.Date;/*** 使用循环控制来实现回溯,解决N皇后* @author newflydd@189.cn* Time ...
突然想到,递归逆置一个字符串的实现,应该还是挺简单的。不过写递归时老是会忘记return。//public String substring(int beginIndex)
//public String substring(int beginIndex, int endIndex)
//beginIndex -- 起始索引(包括), 索引从 0 开始。
//endIndex -- 结束索引(不包括)publicclass Reverse {privatestatic String tempStr="";publicstatic String reverseStr(String str) {if (str.length() == 1 || str.length() =...
public class Demo04 {//用递归实现阶乘//递归太耗费资源,开发中不建议使用,如果数值过大,电脑可能会卡死//递必须要有一个不调用自身的方法,否则就会陷入死循环public static void main(String[] args) {int d = d(3);System.out.println(d);}public static int d(int a){if (a==1){ //如果a等于1说明乘到最后了,返回结果1,并结束方法return 1; //return有两种作用返回结果和结束方法}else {return a*d(a-1);//如果a不等于1,...
例子一:
程序结束口:表达式(n==-1)为true,代表n(100)被递减完了,已经不能被递减了,
如不是-1,则代表还有数值可以被递减,此题及计算结果为偶数总和,递减时应当判断 当前n是否为偶数
如果是偶数,则 sum(偶数总和) = n(当前数值)+ 调用此方法(n(当前数值)-1(每次递减1))
如果不是偶数,则不需要添加到sum 里面,直接再次调用自己本身方法,n-1,进入下一轮/*** 计算1-100以内偶数的总和* n为要计算的数值(100)* sum为总和*/
public static...
Java之File类及递归树形展示目录20150804下面的构造函数可以用来生成File 对象: File(String directoryPath) File(String directoryPath, String filename) File(File dirObj, String filename)这里,directoryPath是文件的路径名,filename 是文件名,dirObj 一个指定目录的File 对象。下面的例子创建了三个文件:f1,f2,和f3。第一个File对象是由仅有一个目录路径参数的构造函数生成的。第二个对象有两...
递归问题是编写程序中常见的问题之一。此随笔对具有明显递归的汉诺塔问题进行说明。 1import java.util.Scanner;2 3/** 4 * 递归:汉诺塔5 *6 * @author xcx7 * @time 2017年7月3日上午8:16:078*/ 9publicclass Hanoi {
10privatestaticint i = 0;
1112publicstaticvoid main(String[] args) {
13int n = 0;
14 Scanner reader = new Scanner(System.in);
15 System.out.println("请输入盘子的数量:");
16 ...
最近看了Mark.Allen.Weiss的算法与数据结构,看到了里面讲述的表、栈和和队列,结合最近工程用的比较多的递归运算。所以这里讲一下递归 因为在年初的时候看了《大话数据结果》(推荐看一下),这里先讲一下概念:函数的递归调用和普通函数调用是一样的,当程序执行到某个函数时,将这个函数进行入栈操作,入栈之前主要做三件事 1.把入参,返回地址等返回给被调用函数保存 2.分配栈空间 3.准备被调用 出栈也一样: ...
1.N个台阶的走法递归【这里设为10个台阶】/*** N个台阶的走法递归* <p>* 有个楼梯,台阶有10个,每次可以跳上1阶 或者 2阶 ,那么台阶的走法一共有多少种*/@Testpublicvoid t() {System.out.println(f(10));}//斐波那契数列变形,求N个台阶的走法,递归方法publicint f(int n) {if (n <= 2) {return n;}return f(n - 1) + f(n - 2);}View Code 2.文件删除递归/*** 文件删除递归* <p>* 1:检测文件夹是否存在,不存在则退出* 2:获取该...
递归二字顾名思义就是:递过去,归回来、所以我索性叫它做有借有还吧。 下面的例子由c而来: public class Main { public static void main(String[] args) { fun(1); } public static void fun(int n) { System.out.printf("...
一。this关键字,使用的情形,以及如何使用。 1.使用的情形 类中的方法体中使用this --初始化该对象 类的构造器中使用this --引用,调用该方法的对象 2.不写this,调用 只要方法或者构造器中 不存在成员变量与局部变量同名的情况,可直接不写this 否则方法中或构造器中使用的就是局部变量 3.static 静态方法不能调用this,不能调用任何非static修饰的成员变量 或者方法二。java方法中 参数传递...
递归版package MergeSort;import Utils.SortUtils;
/*** 归并排序递归版* @author liguodong*/publicclassDemo02 {publicstaticvoidmergeSort(int[] a){mSort(a, a, 0, a.length-1);}/*** * @param SR为待排序的数据* @param TR1为排序之后的数据* @param s* @param t*/publicstaticvoidmSort(int[] SR,int[] TR1, int s,int t){int m;int[] TR2 = newint[SR.length];if(s==t){TR1[s] = SR[s];}else {m = (s+t)/2;//4mSort(SR, TR2...
零、思路解析对于给出的文件查看其下面的所有目录,将这个目录下的所有目录放入待遍历的目录集合中,每次取出该集合中的目录遍历,如果是目录再次放入该目录中进行遍历。一、代码/*** 非递归的方式获取目录中的所有文件<br>* 此方法获取的路径未按照目录->文件方式排列** @param dirPath 目录路径* @return 指定目录下所有文件和目录的集合*/publicstatic List<File> listAllFile(String dirPath) {LinkedList<File> allFiles = ne...
1.归并排序思想:以2路归并为例,一个有n个记录的序列可以看作n个长度为1的有序子序列,将其两两合并成n/2(向上取整)个长度为2或1的有序序列,当有奇数个记录时为1,重复归并,直到得到一个长度为n的有序序列。2.归并排序的复杂度:递归:时间复杂度O(nlongn),空间复杂度O(n+longn)非递归:时间复杂度O(nlongn),空间复杂度O(n)所以用到归并排序,还是优先考虑非递归吧。 3.递归实现 1publicvoid mergeSort1(int[] data){2 ...
1.汉诺塔问题描述N阶汉诺塔:假设有3个分别命名为x,y,z的三个塔座,在x上有n个盘子,直径大小不同,有小到大按标号1,2,3...n排列,要借助y将n个盘子转移到z上,期间不能让小盘子压在大盘子上。规则:每次至移动一个盘子;盘子可以插在x,y,z任意一个塔座上;任何时候都不能将大盘压在小盘上。2.解题思路当n=1时,直接把盘子由x——>z;当n>1时,需利用y,首先将(n-1)个盘子由x——>y,把第n个实现x——>z,然后把问题转换为实现(...