怎麼解釋啊?

zagege 2008-01-17 07:28:02
我的代碼是這樣的
package dao;
import java.util.Date;
public class Test {
static int i=0;
static boolean a;
public boolean tt(int a){
if(a == 0){
Date d = new Date();
return true;
}
a = a - 1;
System.out.println("a - 1 = "+a);
if(tt(a)){
i++;
System.out.println("a = "+a);
return true;
}else{
return false;
}
}
public static void main(String[]agrs){
Test t = new Test();
System.out.println(t.tt(5));
System.out.println("i = " + i);
}

}
結果


a - 1 = 4
a - 1 = 3
a - 1 = 2
a - 1 = 1
a - 1 = 0
a = 0
a = 1
a = 2
a = 3
a = 4
true
i = 5

問題是:為什麼i=5?
為什麼打印5次
a = 0
a = 1
a = 2
a = 3
a = 4 怎麼不是打印一次勒?
...全文
90 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
eidolon_warrior 2008-01-18
  • 打赏
  • 举报
回复
结贴请参考
http://topic.csdn.net/u/20080110/19/7cb462f1-cac6-4c28-848e-0a879f4fd642.html
zagege 2008-01-18
  • 打赏
  • 举报
回复
怎麼加分啊..

剛來的.嘿嘿..

分少.別介意..
zagege 2008-01-18
  • 打赏
  • 举报
回复
up
zagege 2008-01-18
  • 打赏
  • 举报
回复
多謝各位大哥.
那個static boolean a;是沒用的.我忘刪勒.

再次感謝hitprince(工大王子)
我還想問你一下.就是後面5次打印的.
我不知道為什麼會打印五次,就算打印五次.
我覺得應該都是a = 0;啊.
為什麼1,2,3,4都出來勒.我減後並沒有再加啊.

這種方法叫“递归”? 學習勒..
我數據結構學得不好..見笑勒.嘿嘿..
不懂编程 2008-01-18
  • 打赏
  • 举报
回复
你跟踪一下就知道了
「已注销」 2008-01-17
  • 打赏
  • 举报
回复
你画一下图就可以了

a-1=4
if(tt(4))
a-1=3
if(tt(3))
a-1=2
if(tt(2))
a-1=1
if(tt(1))
a-1=0
if(tt(0))
tt(0)返回true
执行i++
输出a=0
返回true
执行i++
输出a=1
返回true
执行i++
输出a=2
返回true
执行i++
输出a=3
返回true
执行i++
输出a=4返回true
输出true

i共加了5次,所以i=5

yiyi_wx 2008-01-17
  • 打赏
  • 举报
回复
呵呵,4楼细心。。。
楼主的这个a是参数变量int a
lz把两个类型的变量起一样的名字了,最好换换
kx201051291234 2008-01-17
  • 打赏
  • 举报
回复
a = a - 1;

boolean 变量能这样吗
yiyi_wx 2008-01-17
  • 打赏
  • 举报
回复
前5次a均不为0,所以每次都会减1然后输出的
sidenycc 2008-01-17
  • 打赏
  • 举报
回复
你递归了5次,当然要打印5次咯
zagege 2008-01-17
  • 打赏
  • 举报
回复
up

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧