优化递归函数
Optimise a recursive function
对于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);
}
}
时间接收器是打印值并刷新输出 ( std::endl
)。
您可以通过使用一种"缓冲区"来避免时间下沉,例如std::vector
,然后您可以迭代以打印。通过这种方式,时间花在实际的"计算"上,然后您可以对其进行分析,而不是花时间打印输出。
使用代码的示例:
#include <iostream>
#include <vector>
static std::vector<int> values;
void singleSquareRemove (int s)
{
for (int i = s - 1; i >= 1; --i)
singleSquareRemove(i);
values.push_back(s);
}
void whenSquareisFull (int v)
{
switch (v) {
case 1: case 2:
values.push_back(v);
break;
case 3: {
values.push_back(1);
values.push_back(v);
} break;
default: {
whenSquareisFull(v - 2);
for (int i = v - 3; i > 0; --i) singleSquareRemove(i);
values.push_back(v);
} break;
}
}
int main()
{
unsigned int n {0};
std::cin >> n;
// start timing here
whenSquareisFull(n);
while (--n > 0) singleSquareRemove(n);
// stop timing here
for (auto itr = values.begin(); itr != values.end(); ++itr)
std::cout << *itr << std::endl;
return 0;
}
希望对您有所帮助!
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何在Elixir中调用递归函数并行
- 递归函数有效,但无法记忆
- 为什么我的递归函数按降序打印,然后按升序打印?
- 为什么递归函数的最终输出是 5?
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 如何将记忆应用于此递归函数?
- 如何从递归函数中完全返回,该函数给出了每个函数结果的累积相加?
- 无穷大而循环时具有递归函数
- 即使没有调用这个递归函数,它是如何工作的?
- 如何使此递归函数从给定的起始位置返回最小的整数?
- 尾递归函数未被 g++ 优化
- 优化 BigInt 递归函数
- 优化递归函数
- 优化此递归函数[Boggle resolver]
- 在turbo c++中,可以将一个普通递归函数转换为尾递归函数来对其进行优化
- 为什么当递归函数结果相乘时,g++ 仍然优化尾递归
- 尝试优化和理解打印数字除数的递归函数的运行时
- 优化递归函数
- gcc优化递归函数吗?怎么做