所以我想弄清楚算法的运行时间是什么
#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,我调用了一个递归函数的collatz函数。我们可以说T(n)= 3n + 1如果n是奇数且T(n)= n / 2的n是偶数我们可以考虑3n + 1因为它大于n / 2但是然后是T( n)= 3n + 1但是接着是什么?
答案 0 :(得分:1)
我认为没有人知道答案。实际上,您的程序甚至可能永远不会终止,因为从未证明n
总是会达到1
的值,因此相信它会(Collatz conjecture} < / p>
答案 1 :(得分:-1)
John Horton Conway在1972年证明了Collatz问题的自然概括在算法上是不可判定的,所以你的函数(目前)不可能有界限。