所以我想弄清楚什麼是我的算法的for循環迭代n中的運行時間運行我在Collatz的時間(3N + 1)算法
#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;
}
所以基本上我有一個時間爲O(n)對於每個n我稱之爲遞歸函數collatz函數。我們可以說如果n是奇數並且n的T(n)= n/2是偶數,T(n)= 3n + 1,我們可以考慮3n + 1,因爲它大於n/2,但是然後T(n)= 3n +1然後呢?
hahaha,所以它沒有界限?我可以改變我的算法使其有界嗎? – alkabary 2015-04-05 01:05:59
這取決於你想要做什麼。但是,如果你想確定它是有界的,你將不得不改變程序的整個行爲... – 2015-04-05 01:06:43