コラッツの問題 | spin on the RITZ

コラッツの問題

コラッツの問題 - Wikipedia -


//--------------------------------------
// コラッツの問題
//
// 1に至るまでのステップ数を計算する
//--------------------------------------

#include <iostream>
using namespace std;

int collatz(int n)
{
    int i;
    for (i = 0;n > 1;i++) {
        if (n&1) n = 3 * n + 1;
        else     n = n / 2;
    }
    return i;
}

int main(void)
{
    cout << collatz(27);

    return 0;
}


宿題片付けスレで見つけたので載せてみる。

n&1という、敢えて剰余演算子を使わない暴挙に出る。というより、最初はなぜか再帰で書いてました。



ある自然数nが与えられて


nが偶数→2で割る

nが奇数→3倍して1を足す


という操作を繰り返すと、有限回で1になる。はず。

コラッツの問題はこんな感じです。


3 × 253までは反例が見つかってないそうですよ~



プログラムの簡単な課題として、いかにも出されそうな内容ですね

再帰・非再帰の両方書け。みたいな?