递归算法
今年上半年开展新项目, 每天都很忙
但也很充实, 学到了很多东西, 比如如何处理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));
}
}
还没有评论,来说两句吧...