1

我尝试制作以下程序,起初它运行良好。

Label 1
Input "n=", Q
If Q≤0
...Then
Goto 1
Else
Label 2
((Q-2int(Q/2))(3Q+1)+(1-Q+2int(Q/2))(Q/2))->Q
Display Q
If Q≠1
Then
Goto 2
Else
Goto 1

这应该做的是我输入一个起始数字,如果它是偶数,它会Q/2。如果它很奇怪,它会执行3Q+1并将结果存储回Q. 这就是 Collat​​z 猜想,它指出,如果遵循这个迭代,无论你从什么数字开始,它总是会降到 1。一些起始数字需要更多的步骤才能达到,而一些起始数字需要更少的步骤。

问题:

有时程序经过大量迭代后,它会显示 ERROR,当我按下调试时,它会将我的光标移到Q.if Q≠1

你知道为什么会一直这样吗?谢谢。

4

1 回答 1

0

大多数人在做这个难题时必须克服的障碍是由大量数字引起的溢出——我认为它发生在 IIRC 23 左右的某个数字上。可能是这种情况,但我不明白为什么它会将您的光标移到 Q 上。

于 2010-11-03T06:26:10.803 回答