递归算法的一些规则
递归的通用规则:
1 每一次函数调用都会有一次返回.当程序流执行到某一级递归的结尾处时,它会转移到前一级递归继续执行。
2 递归函数中,位于递归调用前的语句和被调函数具有相同的顺序。如打印语句 #1 位于递归调用语句前,它按照递归调用的顺序被执行了 4 次。
3 每一级的函数调用都有自己的私有变量。
4 递归函数中,位于递归调用语句后的语句的执行顺序和各个被调用函数的顺序相反。
5 虽然每一级递归有自己的变量,但是函数代码并不会得到复制。
6 递归函数中必须包含可以终止递归调用的语句。
4
5 // used for recursion invoke example
6 private static void up_and_down(int n) {
7 System.out.println("Level " + n + ": location " + System.identityHashCode(n)); #1
8 if (n < 4) {
9 up_and_down(n + 1);
10 }
11 System.out.println("after ==== Level " + n + ": location " + System.identityHashCode(n));
12 }
运行结果如下:
Level 1: location 2055496604
Level 2: location 886982024
Level 3: location 1822883541
Level 4: location 1201965485
after ==== Level 4: location 1201965485
after ==== Level 3: location 1822883541
after ==== Level 2: location 886982024
after ==== Level 1: location 2055496604