我尝试制作以下程序,它最初工作正常。
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
。这是Collatz猜想,它指出如果继续这个迭代,无论你开始使用什么数字,它总是会降到1.一些起始数字需要更多步骤才能达到,而有些则需要更少的步骤。
有时在程序经历大量迭代后,它会显示ERROR,当我按下debug时,它会将光标移到Q
中的if Q≠1
上。
你知道为什么会这样吗?感谢。
答案 0 :(得分:0)
大多数人在做这个难题时必须克服的障碍是由大量数字引起的溢出 - 我认为它发生在23岁左右的某个地方,即IIRC。可能是这种情况,但我不明白为什么它会把你的光标放在Q上。