求救 递归算法结果是什么

chenhongxin 2008-04-05 10:28:50
public class SubClass {
private int res = 1;

public int sub(int a[], int len) {
if (len == 0) {
res = a[0];
} else {
sub(a, len - 1);
res = res * a[len - 1];
}
return res;
}

public static void main(String args[]) {
int a[] = { 1, 2, 3, 8 };
System.out.println(new SubClass().sub(a, a.length));

}
}
执行结果为什么不是1 ,而是48.。谢谢大侠了。。。。。
...全文
103 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
llpp0022 2008-04-09
  • 打赏
  • 举报
回复
len==1就是你预期的想法了
jnh1983 2008-04-09
  • 打赏
  • 举报
回复
res=1*8
res=1*8*3
res=1*8*3*2
jnh1983 2008-04-09
  • 打赏
  • 举报
回复
a[0]*a[0]*a[1]*a[2]*a[3]=48

[code=Java]public class Recursion {
private int res = 2;

public int sub(int a[], int len) {
System.out.println("Number is "+len); //print len;
if (len == 0) {
res = a[0];
System.out.print("if ");
} else {
sub(a, len - 1);
System.out.print("else " + a[len - 1] + ", ");
res = res * a[len - 1];
}
System.out.println("res=" + res + ", "); //print result;
return res;
}

public static void main(String args[]) {
int a[] = { 3, 5, 7, 11 };
System.out.println(new Recursion().sub(a, a.length)); //print final result

}
}[code]
----------------------------------------------------------
Number is 4
Number is 3
Number is 2
Number is 1
Number is 0
if res=3,
else 3, res=9,
else 5, res=45,
else 7, res=315,
else 11, res=3465,
3465

3465=3*3*5*7*11
cl55 2008-04-08
  • 打赏
  • 举报
回复
进栈几层后出栈就要出几层。 你的代码每次出栈都执行res = res * a[len - 1]; 然后返回,结果自然就是个迭乘了。
chenhongxin 2008-04-06
  • 打赏
  • 举报
回复
我跑了一下执行线索是先执行else ,再执行if ,后来又执行 else 中res = res * a[len - 1];
不知道为什么,请大家指点。。。
frilly 2008-04-06
  • 打赏
  • 举报
回复
sub(a, a.length);

这个时间len = a.length != 0, 条件不成立,当然else了
dracularking 2008-04-05
  • 打赏
  • 举报
回复
递归的方式迭乘了
dracularking 2008-04-05
  • 打赏
  • 举报
回复
1*2*3*8=48

62,614

社区成员

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

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