我的Collat​​z(3n + 1)算法的运行时间

时间:2015-04-05 00:58:15

标签: algorithm recursion time-complexity

所以我想弄清楚算法的运行时间是什么

    #include <iostream>
    using namespace std;
    int steps = 0;

    void collatz(int n)
    {
        if(n % 2 == 0)
        {
            n = n/2;
            steps++;
        }
        else
        {
            n = 3*n + 1;
            steps++;
        }

        if(n==1)
        {
            return;
        }
        else
        { 
            collatz(n);
        }
    }

    int main () 
    {
        int x = 0;
        int *L = new int[x];

        cout << "Hello world " << endl; 

        for(int n = 1;n <= 27;n++)
        {
            collatz(n);
            L[x] = steps;
            x++;
            steps = 0;
        } 

        cout << "|";
        for(int i = 0;i < x;i++)
        {
            cout <<  L[i] << "|";
        }
        cout << endl;
        return 0;
    }

所以基本上我有一个for循环,迭代n次O(n),对于每个n,我调用了一个递归函数的collat​​z函数。我们可以说T(n)= 3n + 1如果n是奇数且T(n)= n / 2的n是偶数我们可以考虑3n + 1因为它大于n / 2但是然后是T( n)= 3n + 1但是接着是什么?

2 个答案:

答案 0 :(得分:1)

我认为没有人知道答案。实际上,您的程序甚至可能永远不会终止,因为从未证明n总是会达到1的值,因此相信它会(Collatz conjecture} < / p>

答案 1 :(得分:-1)

John Horton Conway在1972年证明了Collat​​z问题的自然概括在算法上是不可判定的,所以你的函数(目前)不可能有界限。