黑马程序员技术交流社区

标题: 关于迭代的一个小例子 [打印本页]

作者: 沫然    时间: 2014-5-5 16:13
标题: 关于迭代的一个小例子
本帖最后由 沫然 于 2014-5-6 06:54 编辑
  1. public class Count {

  2.         public static void main(String[] args) {
  3.                 count(1);
  4.         }

  5.         private static void count(int n) {
  6.                 if(n<10) {
  7.                         count(n+1);
  8.                 }
  9.                 System.out.println(n);
  10.         }
  11. }
复制代码
谁能帮我解释一下打印结果为什么是10到1,而不是1到10?

作者: 徘徊消逝中    时间: 2014-5-5 16:27
private static void count(int n) {
                if(n<10) {
                        count(n+1);
                }
                System.out.println(n);
        }

看你的方法,每次调用的时候,先执行 count(n+1)这一句,则调到了下一层这个函数中,System.out.println(n);还是没有执行,但是调用已经有n+1了,所以最先打印的是10,如果下面么这样修改,就是先打印1
private static void count(int n) {
                System.out.println(n);
                if(n<10) {
                        count(n+1);
                }
        }
作者: 赵连明    时间: 2014-5-5 16:29
递归输出就相反的

判断n=1 执行reverse n=2  
  判断n=2 执行reverse n=3      
   判断n=3 执行reverse n=4  
......
          判断n=9 执行reverse n=10
            判断n=10直接返回   
      输出10   
    输出9
......
   输出3
  输出2
输出1


作者: heima_xyu    时间: 2014-5-5 16:37
count(int n)方法用到了递归。
1.来一步步执行,首先count函数传入int型的值1带入n,它满足if(n<10),然后执行count(n+1)
2.即执行count(2),不会执行到 System.out.println(n);语句。
3.类似第一步,传入2代入n,执行count(2+1),不会执行到 System.out.println(n);语句。
4.以此类推,当n=9,满足if(n<10),,执行count(9+1).不满足(n<10),条件,可以执行System.out.println(n)
count(10)执行结束,则count(9)的打印语句输出,然后分别输出count(8)......count(1)的System.out.println(n)
语句。

递归会开拓很大一片内存,一般少用。
用画图工具来解释应该能更清晰明白些,呵呵。
作者: yemenglin    时间: 2014-5-5 16:40
递归调用,只要满足条件的情况下 即n<10的时候,if(n<10){count(n+1);}这段代码会重复执行,直到n=10时候才会跳出这段代码执行System.out.println(n)打印出10,依次类推,你可以调断点看看程序是怎么执行的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2