Java:递归-While Loop Vs If Loop

时间:2012-08-07 06:18:09

标签: java recursion if-statement while-loop infinite-loop

代码设计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. 我已经把回归放在了第二个设计中。所以应该有效 精细。你也可以详细解释一下吗?

8 个答案:

答案 0 :(得分:2)

1。首先if 非循环,我们只有for循环,for-each,{{ 1}}循环和while循环。

2. 第二个代码进入无限循环的原因是,永远不会减少 do-while的值。

这样做....

num

答案 1 :(得分:1)

当输入while循环时,num大于零且其值不会改变。

答案 2 :(得分:0)

传递value方法后,num的{​​{1}}未发生变化。

recursion

答案 3 :(得分:0)

num的值在循环内不会改变。所以它不断循环。

答案 4 :(得分:0)

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

在你的while循环中,你传递的是2号。 2总是大于0所以它会进入无限循环;

为避免无限循环,您需要更改枚举变量的值;

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

答案 5 :(得分:0)

是否使用循环或递归,而不是同时使用它们
通常,如果一个人可以使用循环执行他想要的操作,他就不再考虑递归,因为使用循环更快且开销更少。

回到你的问题:
1.无限循环是不可避免的。因为循环中num没有减少 2.当然有一些回报,但不是从recursionnum = 2num = 1一起输入的情况。 会出现以下情况:您使用recursion输入num = 2。它使用recursion调用num = 1。在那里,有无限的循环,当然还有无限的回报。但是没有回到recursion(2)

答案 6 :(得分:-2)

原因是num是按值复制的,而不是作为recursion( num - 1 );

的调用中的引用

编辑:是的,人们很乐意投票,不是'他们?确实,引用与复制值不是正确的答案,但在我最初阅读他的代码示例时,它看起来像是对该特定问题的误解。我有所纠正。

答案 7 :(得分:-2)

我不知道为什么你要经历所有这一切来做这样的功能?如果我没有收到您的问题,我会道歉,但我建议这是一个很好的代码。

public static void main(String[] args){
    countdown(10);
}

public void countdown(int num){

    for(int i = num; i >= 0; i--){
        System.out.println(num);
    }
}