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