Java 在这种情况下,递归是如何工作的?

Java 在这种情况下,递归是如何工作的?,java,recursion,stack,Java,Recursion,Stack,我是这个论坛的新手,我希望我不会犯任何错误。 这是我的问题。我想我理解递归的基本原理及其实现,但我在理解计算机在执行递归代码时的确切步骤方面存在问题 下面是一个例子: 公共班机{ public static void MyAlgorithm (int [] A, int l, int r ) { if (l<r) { int m = (l+r)/2; MyAlgorithm(A, l, m); for (int i = l; i&l

我是这个论坛的新手,我希望我不会犯任何错误。 这是我的问题。我想我理解递归的基本原理及其实现,但我在理解计算机在执行递归代码时的确切步骤方面存在问题

下面是一个例子:

公共班机{

public static void MyAlgorithm (int [] A, int l, int r ) {
    if (l<r) {
        int m = (l+r)/2;
        MyAlgorithm(A, l, m);

        for (int i = l; i<=r; i++) {
            System.out.println(A[i]);
        }

        MyAlgorithm(A, m+1, r);
    }


}
public static void main (String args[]) {

    int [] A = {1,2,3,4};

    MyAlgorithm (A, 0, 3);
}
publicstaticvoidmyalgorithm(int[]A,int-l,int-r){

if(l执行调用将是这样的

MyAlgorithm(A,0,3) 
    (l < r : true)
     m = (0+3)/2=1
     MyAlgorithm(A,0,1) 
            (l < r : true) 
            m = (0+1)/2=0
            MyAlgorithm(A,0,0) 
                (l < r : false) return

            loop from l=0 to r=1
            System.out.println(A[0]);
            System.out.println(A[1]);

            //MyAlgorithm(A,m+1,r)
            MyAlgorithm(A,1,1) 
                (l < r : false) return

    loop from 1=0 to r=3
    System.out.println(A[0]);
    System.out.println(A[1]);
    System.out.println(A[3]);
    System.out.println(A[4]);

    //MyAlgorithm(A,m+1,r)
    MyAlgorithm(A,2,3)
        (l < r : true)
        m=(2+3)/2 = 2
        MyAlgorithm(A,2,2)
            (l < r : false) return

    loop from 1=2 to r=3
    System.out.println(A[2]);
    System.out.println(A[3]);

    MyAlgorithm(A,3,3)
            (l < r : false) return      
return
MyAlgorithm(A,0,3)
(l

这就引出了答案:12123434

方法调用是否是递归的并不改变它的工作方式。每次执行都是一个接一个地执行。如果指令是方法调用,那么方法中的所有指令都会执行。使用纸和笔试着跟踪执行。谢谢,JB Nizet。因此递归是连续的我需要遍历代码并最初“忽略”递归调用?但是为什么循环一开始不打印1,2,3,4,因为在第一次调用期间i=l是1,r是3?因为在打印1,2,3,4之前,有一个对MyAlgorithm(a,0,1)的递归调用。请参阅下面的答案感谢伟大的回答,我想我现在就得到了这段代码!