java – 如何可视化递归
我试图通过可视化来理解
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);之后,每个方法将继续退出并返回到代码中的前一个“调用”点
例如… 绿色是“推”,橙色是“流行”的结果 显然,在某些时候,你会回到主,但这只是一个例子 这与“普通”代码的工作方式没有什么不同,你调用一个方法,当它返回时,它返回到之前执行的那个点 这是对过程的过度简化,但我希望它能让您更好地可视化过程 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |