-2
對於n = 18,我的代碼在1GHz機器上花費的時間超過0.5秒。 我認爲這是由於我使用遞歸函數,但我並不真正知道如何優化此代碼,因爲它實際上只是「打印」數字...... 因此,也許問題來自這樣一個事實:我正在使用遞歸函數。優化遞歸函數
這裏是我的代碼:
#include<iostream>
void singleSquareRemove (int s)
{
if (s == 1)
{
std::cout << 1 << std::endl;
return;
}
else
{
for (int i = s-1; i >=1; --i)
singleSquareRemove(i);
std::cout << s << std::endl;
}
}
void whenSquareisFull (int v)
{
if (v == 1)
{
std::cout << 1 << std::endl;
return;
}
else if (v == 2)
{
std::cout << 2 << std::endl;
return;
}
else if (v == 3)
{
std::cout << 1 << std::endl;
std::cout << 3 << std::endl;
return;
}
else
{
whenSquareisFull(v-2);
for (int i = v-3; i > 0; --i)
singleSquareRemove(i);
std::cout << v << std::endl;
}
}
int main()
{
unsigned int n {0};
std::cin >> n;
whenSquareisFull(n);
for (int i = n-1; i > 0; --i)
{
singleSquareRemove(i);
}
}
簡介,評估和優化熱點,重複。 – crashmstr
通常情況下,你必須進行基準測試等,但是'std :: endl'可能會佔用很多時間。 – Rakete1111
我認爲這可能會有所幫助,如果您將遞歸調用作爲尾調用,以便可以通過編譯器進行優化。 –