Dav*_*vid 3 java recursion collatz
这是示例代码:
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) ;
}
Run Code Online (Sandbox Code Playgroud)
这个工作正常,直到它下降到2.然后它2 4 2 4 2 4 2 4 2 4
无限输出.在我看来,如果输入2为n则为2,则将2 (n % 2 == 0)
除以2,然后将打印1,因为(n != 1)
为假,循环将终止.
为什么不这样呢?
Igb*_*man 13
因为当你到达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) ;
}
Run Code Online (Sandbox Code Playgroud)
编辑:如评论中所述,您可以在else之后省略if测试:
if (n % 2 == 0)
n = n/2 ;
else
n = ((n*3)+1) ;
Run Code Online (Sandbox Code Playgroud)