递归
A方法调用B方法,我们很容易理解
递归就是A方法调用A方法,就是自己调用自己!
利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大的减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。
递归结构包括两个部分:
1、递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。
2、递归体:什么时候需要调用自身方法。
自己调用自己是什么意思?
代码:
package method;
public class MethodDemo05 {
public static void main(String[] args) {
MethodDemo05 methodDemo05 = new MethodDemo05();
methodDemo05.test();
}
public void test() {
test();
}
}
运行结果:
报栈溢出异常,这是一个很可怕的异常。不是这样使用的。
我们以阶乘为例
5的阶乘为:54321
4的阶乘为:432*1
。
。
。
1的阶乘为:1
所以上代码!
package method;
public class MethodDemo06 {
public static void main(String[] args) {
int a = f(5);
System.out.println(a);
}
// 5! 5*4*3*2*1
public static int f(int n) {
if (n == 1) {
return 1;
}else {
return n * f(n - 1);
}
}
}
结果为:
解释:当传入的数字为5时,n = 5;进入f(5)方法,判断n不等于1,所以走else,5 * f(4);而f(4)就相当于再次调用f()方法,所以f(4)再次进入f()方法走else,依次类推,直到n = 1时,程序返回1,所以程序最终返回的结果表达式为:54321 = 120。
但是,能不能递归就不用递归,如果基数太大,比如计算10000的阶乘,计算机可能会承受不住。如果基数比较小的情况下,可以用一下。
在此说明一下:本人不是托,我的这些总结都是根据哔哩哔哩的up主:遇见狂神说,我是看他的视频学习的,真心推荐这位up主,有兴趣的小伙伴可以去看看!!!