一道递归题 求解题过程

GALFORDD 2006-06-14 08:01:56
public void e(int x) {
System.out.print(x + " ");
if(x < 10) {
e(x + 3);
}
System.out.print(x + " ");
}


答案是 1 4 7 10 10 7 4 1

哪位高手解释一下?
...全文
194 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
GALFORDD 2006-06-14
  • 打赏
  • 举报
回复
多谢~~
UnAgain 2006-06-14
  • 打赏
  • 举报
回复
把程序这么一改就全明白了。

int i = 0;
StringBuffer tabs = new StringBuffer();

public void e(int x) {
i++;
tabs.append("\t");

System.out.println(tabs + "进入嵌套层 #" + i + " x = " + x);
if(x < 10) {
e(x + 3);
}

System.out.println(tabs + "离开嵌套层 #" + i + " x = " + x);

i--;
tabs.deleteCharAt(0);

}
kevinliuu 2006-06-14
  • 打赏
  • 举报
回复
用JB2006一步步跟踪得到的结果如下: 入参为1时
(为方便起见,将第一句打印语句叫print1(), 第二句打印语句叫print2();

print()1 --------1 (x=1时的调用)

1<10 ,调用e(4) (入参为4的调用)
print()1 --------4

4<10 ,调用e(7) (入参为7的调用)
print()1 --------7

7<10, 调用e(10) (入参为10的调用)
print()1 --------10

10==10 (不再调用e(10),而是往下走程序)

print()2 --------10 (e(10)的调用完全结束)

print()2 --------7 (e(7)的调用完全结束)

print()2 --------4 (e(4)的调用完全结束)

print()2 --------1 (e(1)的调用完全结束)

整个程序结束



笑看浮华2000 2006-06-14
  • 打赏
  • 举报
回复
调用函数e(1)的时候结果就如楼主那样的!因为这是一个递归的过程,第一句中你先输出了x的值,到第二句进行判断的时候,因为x为1时调用了e(4),所以输出1后就调用了e(4),再输出4后因为x比10还是小,所以再调用e(7),直到e(10)后,x等于10时程序就继续往下执行,先输出了10后再输出7,再输出4,最后再把1输出来,过程就是这样的了

62,614

社区成员

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

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