Java递归

175 阅读1分钟

递归

  • A 方法调用 B 方法,我们很好理解
  • 递归就是:A 方法调用 A方法,就是自己调用自己
  • 利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需要少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无线集合
  • 递归结构包括两个部分:
    • 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环
    • 递归体:什么时候需要调用自身方法
public static void main(String args[]) {
    System.out.println(factorial(5));
}

//n 的阶乘
public static int factorial(int n) {
    //递归头,当n=1的时候,返回
    if (n == 1) {
        return 1;
    } else {
        //递归体
        return n * factorial(n - 1);
    }
}
120
过程解析
第一步: factorial(5); 5 不等于 1, 返回 5 *  factorial(4); 
第二步: factorial(4); 4 不等于 1, 返回 4 *  factorial(3); 
第三步: factorial(3); 3 不等于 1, 返回 3 *  factorial(2); 
第四步: factorial(2); 2 不等于 1, 返回 2 *  factorial(1); 
第五步: factorial(1); 1 等于 1, 返回 1; 
第六步: factorial(1) = 1; factorial(2) = 2 * 1;
第七步: factorial(2) = 2 * 1; factorial(3) = 3 * 2 * 1;
第八步:factorial(3) = 3 * 2 * 1; factorial(4) =4 *  3 * 2 * 1;
第九步:factorial(4) = 4 * 3 * 2 * 1; factorial(5) = 5 * 4 * 3 * 2 * 1;