停止问题将如何工作?

时间:2018-12-08 14:30:12

标签: algorithm

那么嘿,

我有一个学校的任务,它是基于以下代码的:

while(n != 1)
    {
        System.out.print(n + ", ");
        if(n%2 == 0)
        {
            n = n/2;
        }
        else
        {
            n = here;
        }
    }

问题是,如果更改此行会发生什么情况

n = here;

到3n + 2、2n + 1和n + 1 到目前为止,我学到了什么: 对于3n + 2,如果您运行程序,则n将为50,再乘以200,则在特定点后,它将看起来完全相同,尽管不适用于负数; 2n + 1根本不起作用 n + 1就可以了

任何高质量的信息,它将如何正常工作,我无法完全弄清楚?

2 个答案:

答案 0 :(得分:2)

您感兴趣的是Collatz_conjecture及其变体。 假设它永远不会达到无穷远,但是我们仍然没有证据。

我也强烈建议观看以下有关它的小型视频:Collatz_conjecturevariations

答案 1 :(得分:0)

n%2表示余数。因此,偶数等于0,不等于0。

当n不等于偶数时,它将转到else。 所以当你写:

n = n + 1. with following example: 

n=7, n != 1 so in the while, n%2 == 0 equals false, we go to else
n = n + 1, // now n =8
go back to top of while, n != 1 so in the while, n%2 == 0 equals true
n = n/2 //now n = 4
go back to top of while...
n = n/2 // now n = 2
go back to top of while...
n =n/2 // now n = 1
exit while

您也可以调试代码以查看会发生什么,其他示例也可以考虑一下:-)