我试图通过可视化来理解Java中的递归。我浏览了youtube上的一些教程,并使用其中的一个以下示例
public class TestRecursion {
    public static void main(String []args) {
        new TestRecursion().reduceByOne(10);
    }
    public void reduceByOne(int n) {
        System.out.println("Before "+n);
        if(n >= 0) {
            reduceByOne(n-1);
            System.out.println("Inside "+n);
        }
        System.out.println("After "+n);
    }
}
根据到目前为止的了解,对reduceByOne()的每次调用都将放置在执行堆栈中。就像是
因此,首先main()进入堆栈。由于它调用了reduceByOne(10),因此此方法将进入堆栈,然后将调用reduceByOne(9)并将其压入堆栈,依此类推。在将reduceByOne(-1)推入堆栈后,由于没有其他方法可以执行,reduceByOne(-1)将被弹出并执行。
我无法理解一旦弹出该方法会发生什么?让我们说,reduceByOne(2)从堆栈中弹出。我相信,将要执行的代码看起来像这样
public void reduceByOne(2) {
        System.out.println("Before "+2);
        if(2 >= 0) {
            reduceByOne(2-1);
            System.out.println("Inside "+2);
        }
        System.out.println("After "+2);
    }
这不会再将reduceByOne(2-1)放到堆栈上吗?还是会被跳过?如果是这样,运行时如何知道弹出方法后执行什么和跳过什么?
可能是我太复杂了。但是,我无法对递归有一个清晰的了解,因此非常感谢您的帮助。
方法返回时(在您的情况下,该方法将首先在时出现n >= 0),执行将返回到上一个“调用”点,在这种情况下,下一条要执行的行将是System.out.println("Inside "+n);,之后,每个方法都将继续执行退出并返回到代码中的上一个“调用”点
例如...
绿色是“推动”,橙色是“流行”的结果
显然,在某个时候,您将返回main,但这只是一个示例
这与“常规”代码的工作方式没有什么不同,您调用一个方法,当它返回时,它返回到先前执行的位置
这是流程的过度简化,但我希望它可以使您更好地可视化流程
| 归档时间: | 
 | 
| 查看次数: | 2477 次 | 
| 最近记录: |