Collatz問題 #1

1に至るまでの操作回数。最初から1の場合はcollatz(1) = 0になる。

#include <stdio.h>

unsigned int collatz(unsigned int x);

unsigned int collatz(unsigned int x)
{
    unsigned int iter = 0;
    while (x > 1) {
        x = x & 1 ? 3 * x + 1 : x >> 1;
        ++iter;
    }
    return iter;
}

int main(void)
{
    printf("%u\n", collatz(25));
    return 0;
}

シーケンスは
25 76 38 19 58 29 88 44 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
なので、結果はcollatz(25) = 23になる。

なお、このコードには問題がある。