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 哪位高手解释一下?

解决方案 »

  1.   

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

  2.   

    用JB2006一步步跟踪得到的结果如下: 入参为1时
    (为方便起见,将第一句打印语句叫print1(), 第二句打印语句叫print2();print()1  --------1         (x=1时的调用)1<10 ,调用e(4)              (入参为4的调用)
    print()1  --------4 4<10 ,调用e(7)              (入参为7的调用)
    print()1  --------77<10, 调用e(10)             (入参为10的调用)
    print()1  --------1010==10                      (不再调用e(10),而是往下走程序)print()2  --------10        (e(10)的调用完全结束)print()2  --------7         (e(7)的调用完全结束)print()2  --------4         (e(4)的调用完全结束)print()2  --------1         (e(1)的调用完全结束)整个程序结束
      

  3.   

    把程序这么一改就全明白了。    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);    }