问题描述
大家! 我正在努力为学校解决这个问题。我需要计算从任何正整数到 1 需要多少步。我应该使用 TypeScript。 Collatz 猜想或 3x+1 问题可以总结如下: 取任何正整数 n。如果 n 是偶数,则将 n 除以 2 得到 n / 2。如果 n 是奇数,则将 n 乘以 3 并加 1 得到 3n + 1。无限重复该过程。该猜想表明,无论您从哪个数字开始,最终都会达到 1。 这是我对代码的猜测:
function steps(n: number) {
let counter: number = 0;
if (n > 0 && Number.isInteger(n)) {
while (n !== 1) {
if (n % 2 === 0) {
n = n / 2;
counter++;
} else if (n % 2 !== 0) {
n = (n * 3) + 1;
counter++;
}
return counter;
}
} else {
throw new Error('Only positive whole numbers are allowed');
}
}
我希望我的代码尽可能透明,这就是为什么我可能会编写过多的代码。别介意。
解决方法
没错。返回是不合适的。它应该在while循环之外。
function steps(n: number) {
let counter: number = 0;
if (n > 0 && Number.isInteger(n)) {
while (n !== 1) {
if (n % 2 === 0) {
n = n / 2;
counter++;
} else if (n % 2 !== 0) {
n = (n * 3) + 1;
counter++;
}
}
return counter;
} else {
throw new Error('Only positive numbers are allowed');
}
}