A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 沫然 中级黑马   /  2014-5-5 16:13  /  1788 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 沫然 于 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?

4 个回复

正序浏览
递归调用,只要满足条件的情况下 即n<10的时候,if(n<10){count(n+1);}这段代码会重复执行,直到n=10时候才会跳出这段代码执行System.out.println(n)打印出10,依次类推,你可以调断点看看程序是怎么执行的。
回复 使用道具 举报
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)
语句。

递归会开拓很大一片内存,一般少用。
用画图工具来解释应该能更清晰明白些,呵呵。

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
递归输出就相反的

判断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

回复 使用道具 举报
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);
                }
        }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马