【发布时间】:2010-03-24 03:11:34
【问题描述】:
示例代码如下:
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 得到 1。然后将打印 1 并且由于 (n != 1) 为假,循环将终止。
为什么不会发生这种情况?
【问题讨论】:
-
这是递归,不是循环。
-
如果你正确缩进你的代码,就更容易发现这样的逻辑错误