此代码如何工作(简单的Java递归)?

时间:2019-07-14 22:41:24

标签: java recursion

我无法理解递归。我了解理论。就像当一个函数调用自身时一样,需要一个基本的情况来结束递归,而在程序中使用它时,一切都让我感到困惑。例如,我在下面发布了一些代码。当我在递归函数之前调用print函数..它以相反的顺序打印数字(54321),而在递归之后调用它时,它将打印为12345。为什么?

public class Main {

    public static void main(String[] args) {

        printNumbers(5);
    }

    public static void printNumbers(int num){
        if(num==0) {
            return;
        }
       System.out.println(num); // this prints 54321

        printNumbers(num-1);
       System.out.println(num);//this prints 12345

    }
}

1 个答案:

答案 0 :(得分:7)

在这里,诸如“办公桌检查”(笔和纸)之类的东西非常方便,因此您可以逐步检查代码并描述每一步的状态。

从本质上讲,直到printNumbers方法返回之前,第二个print语句才会被调用,这意味着您的执行类似于...

printNumber(5)
    num = 5
    num == 0 = false
    print num (5)
    printNumbers(num - 1)
        num = 4
        num == 0 = false
        print num (4)
        printNumbers(num - 1)
            num = 3
            num == 0 = false
            print num (3)
            printNumbers(num - 1)
                num = 2
                num == 0 = false
                print num (2)
                printNumbers(num - 1)
                    num = 1
                    num == 0 = false
                    print num (1)
                    printNumbers(num - 1)
                        num = 0
                        num == 0 = true (return)
                    print num (1)
                print num (2)
            print num (3)
        print num (4)
    print num (5)