有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java:递归While循环Vs If循环

代码设计1:工作完美

 public static void main (String[] args)
    {       
        recursion(2);       
    }

    public static void recursion(int num)
    {
        if (num > 0)
        {
            recursion( num - 1 );
            System.out.println(num);
        }   
    }

代码设计2:无限循环

public static void main (String[] args)
    {       
        recursion(2);       
    }

    public static void recursion(int num)
    {
        if (num == 0) return;
        while (num > 0)
        {
            recursion( num - 1 );
            System.out.println(num);
        }   
    }
  1. 有人能帮我理解为什么第二次设计越来越流行吗 进入无限循环
  2. 我已经把第二个设计的回报。所以它应该是有效的 好的你能给我详细解释一下吗

共 (6) 个答案

  1. # 1 楼答案

    1首先if不是循环,我们只有for循环、for-eachwhile循环和do-while循环

    2第二个代码进入无限循环的原因是,从不递减num的值

    这样做

    while (num > 0)
        {
            recursion( num - 1 );
            System.out.println(num);
            num = num - 1;           // Decrementing the value of num by 1
        }  
    
  2. # 2 楼答案

       while (num > 0)
                {
                    recursion( num - 1 );
                    System.out.println(num);
                } 
    

    在while循环中,传递2表示num。2总是大于0,所以它进入无限循环

    为了避免无限循环,您必须更改num变量的值

     while (num > 0)
                {
                    recursion( num - 1 );
                    System.out.println(num);
                    num--;
                } 
    
  3. # 3 楼答案

    当输入while循环数大于零且其值不变时

  4. # 4 楼答案

    num的值在循环内不会更改。所以它一直在循环

  5. # 5 楼答案

    numvaluerecursion方法中传递后不会更改

        if (num == 0) return;
        while (num > 0)
        {
            recursion( num - 1 );
            System.out.println(num);
            num--;                   // add this line.
        }   
    
  6. # 6 楼答案

    无论是使用循环还是递归,都不能同时使用它们

    一般来说,如果一个人可以使用循环来完成他所期望的动作,他就不会考虑递归,因为使用循环更快,开销也更少。strong>

    回到你的问题:
    1.无限循环是不可避免的。正如在循环中一样num并没有减少
    2.当然会有一些返回,但不是从使用num = 2num = 1输入recursion的情况中返回的
    下面是发生的情况:用num = 2输入recursion。它用num = 1调用recursion。这里有无限的循环,当然还有无限的回报。但是,再也无法回到recursion(2)