反向Collat​​z序列代码不计算

时间:2014-04-06 12:33:58

标签: c++ collatz

使用C ++,我正在编写一个程序,它将从1开始的前n个数字输出它们各自的"路径计数",这就是我所说的Collat​​z序列的迭代次数。从数字到零(参见Collat​​z猜想的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循环,作为无限循环等,但程序仍然无限期地缓冲或输出虚假值。我觉得我错过了一些非常明显的东西?任何帮助表示赞赏。

0 个答案:

没有答案