加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何可视化递归

发布时间:2020-12-15 04:39:36 所属栏目:Java 来源:网络整理
导读:我试图通过可视化来理解 Java中的递归.我已经在youtube上学习了一些教程,并使用其中一个示例 public class TestRecursion { public static void main(String []args) { new TestRecursion().reduceByOne(10); } public void reduceByOne(int n) { System.out
我试图通过可视化来理解 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()都会被放置在执行堆栈中.就像是

Stack

所以,首先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);之后,每个方法将继续退出并返回到代码中的前一个“调用”点

例如…

Stack And Pop

绿色是“推”,橙色是“流行”的结果

显然,在某些时候,你会回到主,但这只是一个例子

这与“普通”代码的工作方式没有什么不同,你调用一个方法,当它返回时,它返回到之前执行的那个点

这是对过程的过度简化,但我希望它能让您更好地可视化过程

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读