秦疆的JavaSE课程笔记:50 方法 递归讲解
- 一般情况下,我们用A方法调用B方法。
- 递归就是,A方法调用A方法,自己调用自己。
- 利用递归可以用简单的程序来解决一些复杂的问题。通常把一个大型复杂的问题转化为一个与原问题相似的规模较小的问题来求解,递归策略只需要少量的程序就可描述出解题过程所需要的多此重复计算,大大减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。
public class Demo1 {
public static void main(String[] args) {
Demo1 test = new Demo1();
test.test();
}
public void test() {
test();
}
}
====如果运行的话,会报错====
Exception in thread "main" java.lang.StackOverflowError
//也就是堆栈溢出异常。
-
递归结构包括两个部分:
- 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。(比如上面的Demo就是没有递归头)
- 递归体:什么时候需要调用自身方法。
-
下面看一个简单的用递归求阶乘的代码
public class Demo2 {
public static void main(String[] args) {
System.out.println(f(3));
}
public static int f(int n) {
if (n == 1) {
return 1;
} else {
return n*f(n-1);
}
}
}
====输出====
6
- 在嵌套深度较大时,递归可能造成堆栈溢出,得用其他方法代替。