各位大侠,麻烦看这个程序的结果为什么这样

quanmu 2011-05-08 04:27:16
public class Cs3 {
private int value;
private String result = "1*";

public String getResult() {
return result;
}

public Cs3(int value) {
this.value = value;
}

public void simpls() {

for (int i = 2; i < value; i++) {
if (value % i == 0) {
value = value / i;
result += i + "*";
simpls();
}

}
result += value;

}

public static void main(String[] args) {
Cs3 r = new Cs3(40);
r.simpls();
System.out.print(r.getResult());
}

}

//结果是1*2*2*2*5555 ;
//后面为什么那么多5?
...全文
124 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
a19881109 2011-05-08
  • 打赏
  • 举报
回复
因为你递归调用了simpls(),有一个回调的过程 调用了多少次 就会有多少个5,
wang_huanming 2011-05-08
  • 打赏
  • 举报
回复
蛰伏神兽 2011-05-08
  • 打赏
  • 举报
回复
result += value;


问题出在这一句话
你的是递归调用,调用到最内层的时候value=5;
然后就是返回了,但是每次返回都会调用这句话result += value;
你调用的深度是4个所以返回的时候就进行了4次result += value;
所以结果后面有4个5了。你可以看这个流程图

simpls(){
simpls(){
simpls(){
simpls(){
result += value;
}
result += value;
}
result += value;
}
result += value;
}

这样就清楚了吧。

quanmu 2011-05-08
  • 打赏
  • 举报
回复
谢谢各位给出回答和建议!
有点笨 2011-05-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 powerlee2008 的回复:]
Java code

public void simpls() {
for(int i = 2; i < value; i++) {
if (value % i == 0) {
value = value / i;
result += i + "*";
……
[/Quote]


哦,是要找所有的质因数吧,不用递归的
wang740202157 2011-05-08
  • 打赏
  • 举报
回复
那个方法是你递归的问题;你好好检查哈你的递归嘛,因为不晓得你要实现什么功能所以不大好给你改?
潶洞 2011-05-08
  • 打赏
  • 举报
回复

public void simpls() {
--------------------------------第一层
for (int i = 2; i < value; i++) {
if (value % i == 0) {
value = value / i;
result += i + "*";
---------------------------------------第2层
public void simpls() {
for (int i = 2; i < value; i++) {
if (value % i == 0) {
value = value / i;
result += i + "*";
-----------------------------------------第3层
public void simpls() {

for (int i = 2; i < value; i++) {
if (value % i == 0) {
value = value / i;
result += i + "*";
simpls();
}

}
result += value;

}
-------------------------------
}

}
result += value;

}
-------------------------------------------

}

}
result += value;

}

潶洞 2011-05-08
  • 打赏
  • 举报
回复

public void simpls() {
for(int i = 2; i < value; i++) {
if (value % i == 0) {
value = value / i;
result += i + "*";
i = 2;
}
}
result += value;
}


貌似3层
最里面一层将1*2*2*2*输出了
外面两层将那4个5输出了,应为后面两层不满足for条件了只执行了result += value;
uling 2011-05-08
  • 打赏
  • 举报
回复
递归了 难怪没看懂!
我是风 2011-05-08
  • 打赏
  • 举报
回复
不需要递归,将simpls中的递归调用改成i = 2就可以了。
Nitter_Kio 2011-05-08
  • 打赏
  • 举报
回复


LZ要用此程序来实现什么 ??


有点笨 2011-05-08
  • 打赏
  • 举报
回复

不太明白楼主的simpls方法是干什么的
我是风 2011-05-08
  • 打赏
  • 举报
回复

public void simpls() {
for(int i = 2; i < value; i++) {
if (value % i == 0) {
value = value / i;
result += i + "*";
i = 2;
}
}
result += value;
}

62,614

社区成员

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

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