递归结构包括两个部分:
- 定义递归头。 解决:什么时候不调用自身方法。如果没有头,将陷入死循环,也就是递归的结束条件。
- 递归体。 解决:什么时候需要调用自身方法。
- 示例:使用递归求n
-
public class Test22 { public static void main(String[ ] args) { long d1 = System.currentTimeMillis(); factorial(10); long d2 = System.currentTimeMillis(); System.out.printf("递归费时:"+(d2-d1)); //耗时:32ms } /** 求阶乘的方法*/ static long factorial(int n){ if(n==1){//递归头 return 1; }else{//递归体 return n*factorial(n-1);//n! = n * (n-1)! } } }
执行结果如图所示:
-
递归的缺陷
算法简单是递归的优点之一。但是递归调用会占用大量的系统堆栈,内存耗用多,在递归调用层次多时速度要比循环慢的多,所以在使用递归时要慎重。