文章目录
递归(重点)
-
A方法调用B方法,我们很容易理解!
-
递归就是: A方法调用A方法!就是自己调用自己
-
利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为
一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所
需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象
的无限集合。 -
递归结构包括两个部分:
- 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。
- 递归体:什么时候需要调用自身方法。
public static void main(String[] args) {
System.out.println(f(5));
}
//阶乘
//1! 1
//2! 2*1
//3! 3*2*1
//5! 5*4*3*2*1
//假如传入1 1*f(0)=1
//假如传入2 2*f(1)=2
//依此类推3 3*f(2)=6
//依此类推4 4*f(3)=24
//依此类推5 5*f(4)=120
//递归只适合小计算 如果调用自身太多了 就会影响性能
//边界条件:就是当n=1 是f(1)=1 就会由结果 再一步一步返回
//当参数n 不等于 1的时候 就不停的调用自身 等于1的时候就返回结果
//返回阶段:n*(n-1)
//当f(5) 第一次n=5: 5*f(4)=? 第二次n=4:4*f(3)=? ...依此类推 直到"递归头"n=1 返回值1 1的阶乘为f(1)=1 再把结果传递给2: 2*f(1)=2 ... 依此类推5 5*f(4)=120
public static int f(int n) { //f(5)
if (n == 1) { //f(5)第一次:n=5 第一次:n=4 ...当if(n==1)返回值为1 1的阶乘等于1 找到递归头后 在以此把结果传达
return 1;
} else {
return n * f(n - 1);//第一次:5 * f(5-1)=5*f(4)=? 第二次:4 * f(4-1)=4*f(3)=?
}
}
}