使用C ++,我正在编写一个程序,它将从1开始的前n个数字输出它们各自的"路径计数",这就是我所说的Collatz序列的迭代次数。从数字到零(参见Collatz猜想的Wikipedia article)。例如,路径号为8,因为它需要3步才能达到1(8:2 = 4; 4:2 = 2; 2:2 = 1)。
因此我们有简单的功能:
int pathNumber(int n){
int pathCount = 0;
while(n > 1){
if(n % 2 == 0){
n /= 2;
}else{
n *= 3;
n ++;
}
pathCount ++;
}
return pathCount;
}
然后我决定编写一个这样的反函数(称为firstInstanceOf(n)),它将从1开始按升序计算任何给定pathNumber的第一个实例。例如,firstInstanceOf(3)将为8,因为8是从1开始的第一个数字,其pathCount为3.我写的函数如下:
int firstInstanceOf(int s){
int i = 0;
while(pathNumber(i) != s){
i ++;
}
return i;
}
其中s是输入值,i是每次递增1的变量。看起来很简单,代码编译时没有任何警告,但根本不会计算。我已经尝试将后一个函数重新格式化为for循环,作为无限循环等,但程序仍然无限期地缓冲或输出虚假值。我觉得我错过了一些非常明显的东西?任何帮助表示赞赏。