递归算法

今年上半年开展新项目, 每天都很忙

但也很充实, 学到了很多东西, 比如如何处理50M以上的Excel, 批量处理10W+的数据,新的设计模式等。。。

本次分享的是一个小技巧-递归算法。大家做java多年,都知道每天都会有很多if else. 在需求允许情况下,采用递归提升代码质量和简洁,也是一种有效方法

总结Demo如下 

package digui;
/***
 * 1.递归的边界条件 2.递归通式
 * 递归:是一种方法调用自己的编程技术
 * @author Lisa-Luo
 *
 */
public class digui1 {
    public static void main(String[] args) {
        test2(10);
  }

  public static void test() {
        System.out.println("Hello,World!");
        test();
  }

  public static void test2(int n) {
        if(n == 0) {
             return;
        }
        System.out.println(n);
        test2(n - 1);
  }
}

package digui;
/**
 * 该数列中的第N项是由N-1加上N得到的
 * @author Lisa-Luo
 *
 */
public class digui2 {

	// 普通算法
	public static int getNumber(int n) {
		int total = 0;
		while (n > 0) {
			total = total + n;
			n--;
		}
		return total;
	}

	// 递归算法
	public static int getNumberByRecursion(int n) {
		if (n == 1) {
			return 1;
		} else {
			return n + getNumberByRecursion(n - 1);
		}
	}

	public static void main(String[] args) {
		System.out.println(digui2.getNumber(5));
		System.out.println(digui2.getNumberByRecursion(5));
	}
}

package digui;
/**
 * Fibonacci数列
 * 该数列的第1项为0,第二项为1,第N项为第n-1项加上n-2项
 * @author Lisa-Luo
 *
 */
public class digui3 {
    public static int getNumber(int n) {
          //从第三项开始才可能存在前两项
          if(n == 1) {
               return 0;
          } else if(n == 2){
               return 1;
          } else {
               return getNumber(n - 1) + getNumber(n - 2);
          }
    }
    public static void main(String[] args) {
    	System.out.println(digui3.getNumber(5));
	}
}
package digui;

public class digui4{
    //阶乘
    public static int getFactorialNum(int n) {
          if (n == 1 || n ==0) {
               return 1;
          } else {
               return n * getFactorialNum(n - 1);
          }
    }
    public static void main(String[] args) {
    	System.out.println(digui4.getFactorialNum(5));
	}
}
package digui;

public class digui5 {
	/**
	 * 斐波那契数列的实现 0,1,1,2,3,5,8,13,21......
	 * 
	 * @param day
	 */
	public long fibonacci(int day) {
		if (day == 0) { // F(0)=0
			return 0;
		} else if (day == 1 || day == 2) {// F(1)=1
			return 1;
		} else {
			return fibonacci(day - 1) + fibonacci(day - 2); // F(n)=F(n-1)+F(n-2)
		}
	}

	/**
	 * 更为简洁的写法
	 * 
	 * @param day
	 * @return
	 */
	public long fib(int day) {
		return day == 0 ? 0 : (day == 1 || day == 2 ? 1 : fib(day - 1)+ fib(day - 2));
	}

	// 测试
	public static void main(String[] args) {
		digui5 fibonacci = new digui5();
		System.out.println("第11天动物数量为:" + fibonacci.fib(11));
		System.out.println("第11天动物数量为:" + fibonacci.fibonacci(11));
	}
}

 

你可能感兴趣的:(JAVA)