代码之家  ›  专栏  ›  技术社区  ›  Mohamad Alhamoud

while循环中的递归,它是如何工作的?

  •  4
  • Mohamad Alhamoud  · 技术社区  · 15 年前

    你能告诉我这个java代码是如何工作的吗

    public class Main {
        public static void main (String[] args)  {
            Strangemethod(5);
        }
        public static void Strangemethod(int len) {
            while(len > 1){
                System.out.println(len-1);
                Strangemethod(len - 1);
            }
    }
    }
    

    更新:对不起,我没有提到我知道这个代码的结果,但我只想知道执行的步骤。。

    7 回复  |  直到 10 年前
        1
  •  13
  •   dannysauer    15 年前

    那会打印4 3 2 1 1 1 1 1 1。。。

    if()比while()更合适。

        2
  •  2
  •   Shaded    15 年前

    如果我没弄错的话,这不是导致了一个无限循环吗?

    一旦strangemethod(1)返回,strangemethod(2)将再次打印1,然后再次调用strangemethod(1)。

    你是不是忘了在奇怪的方法调用之后减少len?

        3
  •  2
  •   Vishal    15 年前

    例如len=5

     public static void Strangemethod(5) {
                while(5 > 1){
                    System.out.println(5-1);
                    Strangemethod(5 - 1);
                }
    public static void Strangemethod(4) {
                while(4 > 1){
                    System.out.println(4-1);
                    Strangemethod(4 - 1);
                }
    public static void Strangemethod(3) {
                while(3 > 1){
                    System.out.println(3-1);
                    Strangemethod(3 - 1);
                }
        public static void Strangemethod(2) {
                while(2 > 1){
                    System.out.println(2-1);
                    Strangemethod(2 - 1);
                }
        public static void Strangemethod(1) {
                while(1 > 1){//goes back to original(above) call and then an infinite loop since len was never  decremented
    
                }
    

    打印4 3 2 1。。。。。

        4
  •  1
  •   Tom Hawtin - tackline    15 年前

    len 变量不更改 Strangemethod final . 可能你想做的是用 --len; (相当于 len = len - 1; ).

        5
  •  1
  •   JAB    15 年前

    尝试添加 len--; 之后 Strangemethod(len - 1); . 它不会让你进入无限循环。或者,你也可以这样做

    System.out.println(--len);
    Strangemethod(len);
    
        6
  •  0
  •   Nick Holt    15 年前

    这个代码将永远循环。

    len - 1 len = 2 它只是坐在那里输出1。

    这是不寻常的使用 while 在递归函数中。我通常希望看到 if 取而代之的是,它会给你输出:

    4
    3
    2
    1
    

    如果你真的需要 虽然 然后我重写循环如下:

    while(len > 1)
    {
      len--;
      System.out.println(len);
      Strangemethod(len);
    }
    

    这将输出:

    4
    3
    2
    1
    1
    2
    1
    1
    3
    2
    1
    1
    2
    1
    1
    
        7
  •  -3
  •   Jay    15 年前