递归可以理解成一个函数调用自己的过程。
递归头:为了防止递归程序死循环设置的,什么时候不用调用自身方法时就使用递归头。
递归尾:与递归头相反,即什么时候需要调用自身方法的时候就使用递归尾。
注意:就算没有递归头,java中递归不会无限的递归下去,递归太深,堆栈内存会溢出
循环效率比递归高,但是递归能做到的循环未必能做到。
例子:
来自 :https://www.sxt.cn/first-season/025.html
/**
* 测试递归算法
* @author 速学堂www.sxt.cn
*
*/
public class TestRecursion {
static int a = 0;
public static void test01(){
a++;
System.out.println("test01:"+a);
if(a<=10){ //递归头
test01();
}else{ //递归体
System.out.println("over");
}
}
public static void test02(){
System.out.println("TestRecursion.test02()");
}
public static long factorial(int n){
if(n==1){
return 1;
}else{
return n*factorial(n-1);
}
}
public static void main(String[] args) {
test01();
System.out.println(factorial(10));
}
}