Java - 递归思想

Posted zhoux955792

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
    

 

以上是关于Java - 递归思想的主要内容,如果未能解决你的问题,请参考以下文章

算法初步--递归思想(java实现)

算法初步--递归思想(java实现)

Java中的递归思想

Java算法——递归思想

快速排序基本思想,递归写法,python和java编写快速排序

Java - 递归思想