回 帖 发 新 帖 刷新版面

主题:[讨论]高手们,麻烦帮忙看看这题的运算过程~^-^

高手们,麻烦帮忙看看这题的运算过程~^-^

public class Test {
    public static void doit(int i){
        if(i>0){
            doit(i-1);
            System.out.println(i);
            doit(i-1);
        }
    }    
    public static void main(String args[]){doit(4);}

}

结果为 :
1
2
1
3
1
2
1
4
1
2
1
3
1
2
1

有些不解啊???
望高手解答指教。

回复列表 (共2个回复)

沙发

简单的递归算法
当doit(0)时无任何输出 等价于 System.out.print("");
当doit(1)时执行
  doit(0)
  输出1
  doit(0)
所以最后输出doit(1) 等价于 System.out.println(1);
当doit(2)时执行
  doit(1)
  输出2
  doit(1)

....

同理
doit(n)执行

doit(n-1)
输出n
doit(n-1)

最后得出的结论是
n总被比自己小的数所包围
会被n-1所包围
n-1又会被n-2包围 一直到2为止

板凳

谢谢你的解答,清楚了~ :)

我来回复

您尚未登录,请登录后再回复。点此登录或注册