这个STOP问题怎么会结束?

问题描述 投票:0回答:2

嘿,

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

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将起作用

任何质量好的信息,它将如何正常工作,我无法完全理解它?

algorithm
2个回答
2
投票

你感兴趣的是Collatz_conjecture和变化。它应该永远不会无限,但我们仍然没有证据。

此外,我强烈建议观看这些关于它的小视频:Collatz_conjecturevariations


0
投票

n%2表示余数。因此,对于偶数,这等于0并且不均匀。

当n进入不均匀时,它会转到其他地方。所以当你写:

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

您还可以调试代码以查看发生的情况,您可以自己考虑的其他示例:-)

© www.soinside.com 2019 - 2024. All rights reserved.