是否有可用于确定此问题的一般规则? E.g:
int i = 10;
while (i > 1 ) {
if (i%2 == 0) i = i/2;
else i = 3*i - 1;
}
答案 0 :(得分:13)
这是halting problem。没有能够做你所要求的算法。
特别是,如果有这样的算法,那么与你问题中的函数相关的collatz conjecture将是微不足道的(或者至少要容易得多)。
答案 1 :(得分:1)
你可能指的是停止问题。简而言之,没有通用的方法来确定程序是否会停止。查看this article。
答案 2 :(得分:1)
一般来说,“不”。正如其他人已经说过的那样,通过您的具体示例,可以证明不会终止,因为如果i
是偶数(或i
是非正面的,i
只会更小;奇怪,但考虑到初始条件,这将永远不会发生)。最小的正偶数是2,然后在下一次迭代时变为1,然后它将变为2。
有趣的是,你没有检查Collatz猜想,因为你正在迭代“如果偶数则减半,3 * n-1如果奇数”并且Collatz猜想迭代“如果偶数则减半,3 * n + 1如果奇数”。我无法通过快速搜索找到这个序列。
答案 3 :(得分:0)
termination analysis 有几种方法可以证明程序是否将停止。在图灵完备的编程语言中并不总是能够做到这一点,但是有几种total functional programming languages仅限于可证明停止的程序。