递归(面试高频题)
就是一个方法,自身调用自身,但递归不适用于较大数据计算,会导致计算器内存不足从而崩溃
递归包含两个部分:
-
递归头:什么时候不调用自身方法。如果没有递归头,就会陷入死循环。
-
递归体:什么时候需要调用自身方法。
递归的算法公式
package weiwei.method;
public class Demo5 {
public static void main(String[] args) {
System.out.println(f(5));//输出递归
}
//5! 5*4*3*2*1
public static int f(int n){//int一个变量n
if (n==1){//如果n等于1的时候,他的阶乘就是 1*1,所以结果还是为1
return 1;//就让他直接输出1
}else{//如果n不等于1的情况下
/*输出n*f(n-1),加上n为5,就是5*f(5-1) 然后赋(5-1)结果不为1,就继续下去,
f(5-1)=4; f(4-1)=3; f(3-1)=2; f(2-1)=1; 到此等于1了之后,就达到了递归的边界条件,
而1在 n==1的这个条件时,return了一个具体的值,所以1会再次返回找到f(3-1),给他赋一个具体的
值为2,2又会去给f(4-1)赋值3,这样一直赋值到5,然后5把结果输出给了main方法,这样才得以输出*/
return n*f(n-1);
}
}
}
递归和阶乘一样,是一个层层递进的关系,但递归的运行顺序更麻烦,假设递归为5,就可以看做
5==n时: n* f(n-1); f(n-1); f(n-1); f(n-1)获得确定值1后再次返回输出
5* f(5-1); f(4-1); f(3-1); f(2-1)从右到左一次赋值过去,最终得到准确的值,再将值给main方法