C 科拉兹猜想码;“反弹”;13到19岁之间

C 科拉兹猜想码;“反弹”;13到19岁之间,c,C,我正试图解决euler项目的问题14,我最初的暴力尝试让我难堪。出于某种原因,代码遇到13到19之间的循环。我不认为我可以理直气壮地继续使用非暴力方法,除非我能首先让暴力方法至少正确地计算。 我的代码如下所示: unsigned int loop(unsigned int n) { unsigned int count = 0; while(1) { while(is_even(n)) { n /= 2;

我正试图解决euler项目的问题14,我最初的暴力尝试让我难堪。出于某种原因,代码遇到13到19之间的循环。我不认为我可以理直气壮地继续使用非暴力方法,除非我能首先让暴力方法至少正确地计算。 我的代码如下所示:

unsigned int loop(unsigned int n) 
{
    unsigned int count = 0;
    while(1) 
    {
        while(is_even(n)) 
        {
            n /= 2;
        }
        if(n > 1)
            n = (n * 3) + 1;
        else
            break;
        count++;
        printf("%d,", n);
    }
    printf("%d\n", n);
    return count;
}
is_偶数(n)计算为“n&0x01”


有人能告诉我为什么输出是连续的(理论上是无止境的)13,19流,重复吗?

n&0x01
如果
n
是奇数,而不是偶数,则将是
1
。更改
是偶数
返回
!(n&0x01)
n&0x01
如果
n
是奇数,而不是偶数,则将是
1
。更改
是偶数
返回
!(n&0x01)

谢谢,我在编写该函数时显然没有给予足够的注意!谢谢,当我写这个函数的时候,我显然没有给予足够的关注!