编程语言
首页 > 编程语言> > java – 为什么这个循环没有终止?

java – 为什么这个循环没有终止?

作者:互联网

这是示例代码:

public static void col (int n) 
{
    if (n % 2 == 0) 
       n = n/2 ; 
    if (n % 2 != 0) 
       n = ((n*3)+1) ;

    System.out.println (n) ;
    if (n != 1) 
       col (n) ;
}

这很好,直到它下降到2.然后无限输出2 4 2 4 2 4 2 4 2 4.在我看来,如果2输入为n然后(n%2 == 0)为真2将被除以2到yeild 1.然后将打印1,因为(n!= 1)为假,循环将终止.

为什么不这样呢?

解决方法:

因为当你到达1时,你将乘以3并加1,再将你带回4.

你需要一个ELSE.我不知道java,但它看起来像:

public static void col (int n) 
{
    if (n % 2 == 0) 
      n = n/2 ; 
    else if (n % 2 != 0) 
      n = ((n*3)+1) ;

    System.out.println (n) ;
    if (n != 1) 
      col (n) ;
}

编辑:如评论中所述,您可以在else之后省略if测试:

if (n % 2 == 0) 
  n = n/2 ; 
else 
  n = ((n*3)+1) ;

标签:java,recursion,collatz
来源: https://codeday.me/bug/20190713/1452264.html