Java - 递归思想

/**
 * 简单实现阶乘
 * @param n
 * @return
 */
public static double getFactorial(double n) {
    for(double i = n - 1;i > 0;i-- ){
        n *= i;
    }
    return n;
}

/**
 * 求阶乘
 * n!=n*(n-1)*(n-2)*...*1
 * @param n
 * @return
 */
public static int getFactorialValue(int n){
    if(n == 1){
        return 1;
    } else {
        return getFactorialValue(n -1)*n;
    }
}

/**
 * 用递归实现斐波那契数列,适用于求解比较小的位置数值
 * 0 1 1 2 3 5 8 13 21...
 * @param n
 * @return
 */
public static int getFibonacciValue(int n){
    if(n<=0) return 0;
    if(n<=2){
        return 1;
    } else {
        return getFibonacciValue(n-1) + getFibonacciValue(n-2);
    }
}

/**
 * 列出某个目录下所有子目录和文件
 * @param path
 * @return
 */
public static void getDir(String path) throws Exception{
    File file = new File(path);
    if(file.isDirectory()){
        System.out.println("Dir" + file.getPath());
        File[] fileArr = file.listFiles();
        for (File f : fileArr) {
            getDir(f.getPath());
        }
    }else if (file.isFile()){
        System.out.println("File" + file.getPath());
    }else {
        throw new Exception(file.getPath() + "非Dir非File?!");
    }
}

 /**
 * 汉诺塔
 * func:
 * if n!=0 then          ;预定值
 * func(n-1, a, c, b)    ;将n-1个盘子由a移动到b,以c为辅助柱子(注意参数顺序)
 * move a[n] to c        ;将a上的最后一个盘子移动到c
 * func(n-1, b, a, c)    ;将n-1个盘子由b移动到c,以a为辅助柱子
 * endif                 ;完成
 * @param n
 * @param a
 * @param b
 * @param c
 */
public static void getHanoi(int n, String a, String b, String c){
    if(n == 1){
        System.out.println("移动盘子 " + n + " 从 " + a + " 到 " + c);
    }else {
        getHanoi(n-1, a, c, b);
        System.out.println("移动盘子 " + n + " 从 " + a + " 到 " + c);
        getHanoi(n-1, b, a, c);
    }
}

/**
 * 二分法查找值 : 原理就是找中间值
 * 一定是有序表,升序降序都可以
 *
 * @param array 有序数组,但不限于数组
 * @param start 开始查找的数组下标
 * @param end 结束查找的数组下标
 * @param searchValue 要搜索的值
 * @return
 */
public static int search(int[] array, int start, int end, int searchValue){
    if (array != null && array.length > 0){
        int middle = (start + end) / 2;
        int middleValue = array[middle];
        if (searchValue == middleValue){
            return middle;
        }else if (searchValue < middleValue){
            //查询值小于中值,在中值前面再次搜索,缩小范围
            return search(array, start, middle-1, searchValue);
        }else {
            //查询值大于中值,在中值后面再次搜索,缩小范围
            return search(array, middle+1, end, searchValue);
        }
    }else {
        return -1;
    }
}

原文地址:https://www.cnblogs.com/zhoux955792/p/11518446.html

时间: 2024-08-01 12:02:18

Java - 递归思想的相关文章

通过java递归思想实现以树形方式展现出该目录中的所有子目录和文件

当初在开始接触Java时  学习File部分的一个小练习  挺有意思 一开始是通过看 北京圣思园 张龙老师的视频开始学校java的,必须强烈推荐,真很棒. 功能实现:主要实现以树形方式展现出该目录中的所有子目录和文件. 另外, 在展现的时候将目录排在上面,文件排在下面.每一层要加上缩进. 文件是jre6文件夹,我想这文件夹就不用我说什么了.换上自己的文件路径就可以了. [java] view plain copy import java.io.File; public class FileTes

java递归思想

所谓递归,就是自己间接或者直接地自己. 递归需注意的三个条件: 1.边界条件 2.递归前进段 3.递归返回段 当边界条件不满足时,则递归前进 当边界条件满足时,则递归返回 这有个小例子: public class Demo { public static void main(String args[]) { toBin(6); } public static void toBin(int num) { if(num>0) { toBin(num/2); System.out.println(nu

初识java数组与递归思想

数组 数组的初始化: 1.静态初始化: 值由我们来给定,长度通过系统来计算. 格式举例: int[] arr=new int[]{这里是我们给定的值} 静态初始化的简写格式: int[] arr={这里是我们给定的值}:这种方式用法的比较多. 2.动态初始化: 长度有我们来给定,值有系统初始化默认值.各个类型对应的默认值不一样,我们 下面会介绍. 格式举例: int[] arr=int[我们指定的长度]; 注意: 数组类型的变量有两种定义方式: 1.int[] a: 2.int a[]: 推荐使

欧几里得求最大公约数--JAVA递归实现

欧几里得算法求最大公约数算法思想: 求p和q的最大公约数,如果q=0,最大公约数就是p:否则,p除以q余数为r,p和q的最大公约数即q和r的最大公约数. java实现代码: 1 public class Demo0 { 2 public static void main(String[] args) { 3 4 System.out.println(gcd(24,120)); 5 } 6 7 8 public static int gcd(int p,int q){ 9 10 if(q==0)

Java编程思想重点笔记(Java开发必看)

Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面 试过程中,而且在大型项目开发中也是常用的知识,既有简单的概念理解题(比如is-a关系和has-a关系的区别),也有深入的涉及RTTI和JVM底层 反编译知识. 1. Java中的多态性理解(注意与C++区分) Java中除了static方法和final方法(private方法本质上属于final方法,因为不能被子类访问)之外,其它所有的方法都是动态绑定,这意

关于回调和递归思想的理解

1) 面向过程的递归思想在面向对象的编程世界中的递归调用就是回调思想.它们两个的区别就是多了一个封装了方法和属性的对象.回调函数实参传递的是一个函数的指针,其实递归调用也是用函数的相同地址进行递归循环处理数据的.递归函数的原理就是函数的参数值不断地变化,从而不断的重新回到函数的起始地址处根据传递的参数值不断地处理数据.回调函数的原理就是把函数当做一个可以传递的实参赋值给自定义的回调函数的形参,实际传递的是定义函数的地址. a) 理解回调函数最好把函数和类型对象相当,因为他们都是数据变量的集合,都

Java编程思想第四版读书笔记——第十三章 字符串

Java编程思想第四版读书笔记--第十三章 字符串 字符串的操作是计算机程序设计中最常见的行为. 关键词: StringBuilder ,StringBuffer,toString(),format转换,正则表达式, 1.不可变String String对象时不可变的.每当把String对象作为方法的参数时,都会复制一份引用.(其实就是对函数中参数列表中参数的操作不会影响外面的原参数) 如下: import static net.mindview.util.Print.*; public cla

Java编程思想(四) —— 复用类

看了老罗罗升阳的专访,情不自禁地佩服,很年轻,我之前以为和罗永浩一个级别的年龄,也是见过的不是初高中编程的一位大牛之一,专访之后,发现老罗也是一步一个脚印的人.别说什么难做,做不了,你根本就没去尝试,也没有去坚持. If you can't fly then run,if you can't run then walk, if you can't walk then crawl,but whatever you do,you have to keep moving forward--Martin

12.JAVA编程思想——集合的类型

12.JAVA编程思想--集合的类型 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/51100510 标准Java 1.0 和1.1 库配套提供了非常少的一系列集合类.但对于自己的大多数编程要求,它们基本上都能胜任.Java 1.2 提供的是一套重新设计过的大型集合库. 1      Vector Vector 的用法很简单,大多数时候只需用addElement()插入对象,用elementAt()一次提取一个对象,并用el