34 lines
629 B
Text
34 lines
629 B
Text
|
|
bool isEven(int x) {
|
||
|
|
if (divide(x, 2) * 2 == x) {
|
||
|
|
return true;
|
||
|
|
} else {
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
int divide (int a, int b) {
|
||
|
|
if (b == 0) {
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
var result = 0;
|
||
|
|
while (a > 0) {
|
||
|
|
a = a - b;
|
||
|
|
result = result + 1;
|
||
|
|
}
|
||
|
|
return result;
|
||
|
|
}
|
||
|
|
int helper(int x, int count) {
|
||
|
|
if (x == 1) {
|
||
|
|
return count;
|
||
|
|
} else if (isEven(x)) {
|
||
|
|
return helper(divide(x, 2), count + 1);
|
||
|
|
} else {
|
||
|
|
return helper(3 * x + 1, count + 1);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
int collatz(int x) {
|
||
|
|
return helper(x, 0);
|
||
|
|
}
|
||
|
|
int program(int argc, string[] argv) {
|
||
|
|
return collatz(12);
|
||
|
|
}
|