六、递归
递归就是A方法自己调用自己。
慎用!在没有终止条件的情况下自己调用自己会导致栈溢出。
利用递归可以用简单的程序来解决一些复杂方法,它通常把一个大型复杂问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需要少量的程序就可以描述出解题过程所需的多次重复计算,大大减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。
递归结构包括两个部分:
- 递归头:什么时候不用调用自身方法。如果没有头,将陷入死循环;
- 递归体:什么时候需要调用自身方法。
package com.song.method;
public class Demo06 {
public static void main(String[] args) {
//阶乘 n!=n*(n-1)*(n-2)*...*1
System.out.println(f(5));
}
//f(5)=5!=5*4!=5*f(4)
//f(4)=4!=4*3!=4*f(3)
//f(3)=5!=3*2!=3*f(2)
//f(2)=5!=2*1!=2*f(1)
//f(1)=1
public static int f(int n) {
if (n == 1) {
return 1;
} else {
return n * f(n - 1);
}
}
}
程序简单,电脑压力大,每调用一个方法,都会在栈上压一层;递归深度越大,占用越多,时间长。
能不用递归就不用递归,小计算可以用,大型的计算不考虑。只学习思路方法!