繁体   English   中英

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

[英]How does this code work(simple 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

    }
}

在这里,“桌面检查”(笔和纸)之类的东西非常方便,因此您可以逐步执行代码并在每个步骤中描述状态。

本质上,直到printNumbers方法返回时才调用第二条打印语句,这意味着您的执行类似于...

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM