【问题标题】:Please explain ths recursion step by step [closed]请逐步解释递归[关闭]
【发布时间】:2016-03-09 16:45:47
【问题描述】:

请逐步解释递归;

public class TestClass {

    private static void printit(int i) {
        if (i == 1) {
            return;
        }
        System.out.println(i);
        printit(i / 2);
        printit(i / 2);
    }

    public static void main(String args[]) {
        int i = 8;
        printit(i);
    }
}

【问题讨论】:

  • 你不明白什么?
  • 为什么以及如何输出是 8 4 2 2 4 2 2
  • 如果你传入8,那不是1,对吧?所以该方法不会立即返回。然后它打印 8,并在 8 / 2 上调用自己,即 4。现在,如果你传入 4,那不是 1,对吗? ... 等等。拿出铅笔和纸,准确地写下每一步在做什么;它可以帮助您在每次调用方法时缩进,并在返回时取消缩进。我知道这听起来很乏味,但这是学习和内化这些东西的最佳方式。而且这些东西很关键,所以时间花得值。
  • @DeepakKataria 通常与please do thisplease do that 的问题会很不受欢迎。像this is what I tried, can someone explain to me what went wrong? 这样的问题会好很多。

标签: java recursion


【解决方案1】:

如果您使用的是 IDE,您可以使用调试器并亲眼一步一步地查看正在发生的事情。

不管怎样,让我们​​尝试一下,当我们调用递归方法时会发生什么: 你用 8 (printit(8);) 调用方法:

  1. System.out.println(8); -> 8
  2. printit(8 /2 ); -> 使用 8/2=4 再次调用方法
  3. System.out.println(4); -> 4
  4. printit(4 /2 ); > 再次使用 4/2=2 调用方法
  5. System.out.println(2); -> 2
  6. printit(2 /2 ); > 使用 2/2=1 再次调用方法
  7. return; -> 继续上一次通话,(printit(4 /2);)
  8. printit(2 /2 ); > 使用 2/2=1 再次调用方法
  9. return; -> 继续上一次通话,(printit(4 /2);)
  10. 方法结束,继续上一个调用 (printit(8 /2);)
  11. printit(4 /2 ); > 使用 4/2=2 再次调用方法
  12. System.out.println(2); -> 2
  13. 调用printit(2/2); 我们已经知道没有任何结果。
  14. 现在我们再次进行第一次通话,printit(8);,拨打printit(8/2);
  15. System.out.println(4); -> 4
  16. 16 等...

【讨论】:

  • 可爱...谢谢.........!!!
猜你喜欢
  • 1970-01-01
  • 2015-05-11
  • 2012-08-12
  • 2014-10-25
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
  • 2022-09-17
  • 1970-01-01
相关资源
最近更新 更多