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