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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

大家来看看这段代码,说说他的执行顺序,视频中看的不是太清楚...
  1. public class Damo4 {

  2.         public static void main(String[] args) {
  3.                 swap(3);
  4.         }
  5.        
  6.         public static void swap(int i){
  7.                 System.out.println(i);
  8.                 i--;
  9.                 for(int j = 0;j<i;j++){
  10.                         swap(i);
  11.                 }
  12.         }
  13. }
复制代码

点评

童鞋,视频里的图比下面的清晰多了,这样你叫我怎么给你加分?  发表于 2012-6-14 13:11

8 个回复

倒序浏览
先从main进入,然后调用swap函数参数为3,在swap函数中先输出参数一次,然后参数自减,然后调用自身参数为2,最后条用函数,参数为1
回复 使用道具 举报
给你画了个图

。。。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 李盼 于 2012-6-14 10:47 编辑

一 首先,swap(3);执行,会先打印i的值,此时为3
二 然后i--,此时i的值为2,定义j=0,i大于j,条件满足,继续调用swap(2);打印i的值,此时为2
三 然后i--,此时i的值为1,又重新定义了j=0,i大于j条件满足,继续调用swap(1);,打印i的值,此时为1
四 然后i--,此时i的值为0.重新定义j=0,i大于j条件不满足,那么就会停止调用swap(0)
五 此时就会继续判断第三步,for循环里面的j自加1后,变为了1,而第三步里面的i的值为1,i大于j条件不满足,那么就会停止调用swap(1)
六 第三步循环已经结束了,那么这个方法调用完了,会返回第二步,此时i为2,j++后为1,那么ii大于j条件满足,调用swap(2),然后打印i的值,此时i为2
七 然后i--,此时i的值为1,重新定义j=0,i大于j条件满足,继续调用swap(1);,打印i的值,此时为1
八 然后i--, 此时i的值为0,重新定义j=0,i大于j条件不满足,循环结束,方法执行完,返回第七步
九 第七步循环继续,j++,j=1而i也等于1.不满足条件,循环结束,返回第二步
十 第二步的j在第六步时自加了1,这次循环再加1.结果为2,此时i的值也是2,条件不满足,循环结束。整个方法调用完
结果就是 3 2 1 2 1

未命名.jpg (127.86 KB, 下载次数: 28)

未命名.jpg

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
我画了个图,一般递归我都是画图解释的。
想得会乱,还是画图好!

未命名.jpg (36.24 KB, 下载次数: 42)

图解

图解

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
分析见图

sdfg.JPG (38.11 KB, 下载次数: 22)

sdfg.JPG

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
黄昆 中级黑马 2012-6-14 13:19:03
8#
钟成军 发表于 2012-6-14 10:52
分析见图

这个透彻。。。
回复 使用道具 举报
黄昆 中级黑马 2012-6-14 18:46:12
9#
我懂了,谢谢啦!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马