コラッツの問題
コラッツの問題 - 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までは反例が見つかってないそうですよ~
プログラムの簡単な課題として、いかにも出されそうな内容ですね
再帰・非再帰の両方書け。みたいな?