我在完成作业时遇到了麻烦,可能是一个非常熟悉的作业(link)。这是题为“部分编号”的问题2。
基本上,这是一个递归问题,它打印出一个字符串以及由级别定义的节号。如果有一个级别,则打印string1。到string9。 如果有两个,string1.1。 to string9.9。等。我遇到的问题是最后一个细节,程序自己打印出原始字符串。
我的代码:
#include <iostream> // Provides cin, cout
#include <cstdlib> // Provides EXIT_SUCCESS
#include <sstream>
#include <string>
using namespace std;
void numbers(ostream& outs, const string& prefix, unsigned int levels);
int main()
{
numbers(cout, "THERBLIG", 2);
}
void numbers(ostream& outs, const string& prefix, unsigned int levels)
{
if(levels == 0)
{
cout << prefix << endl;
}
else
{
for(int i = 1; i <= 9; i++)
{
string s = (prefix + char('0' + i));
s += '.';
numbers(outs, s, levels - 1);
}
}
}
我知道前缀是通过递归覆盖的,所以不是打印原始字符串而是字符串1.1。我不知道的是如何保持原件完好无损,以便最后可以打印。 (我知道这里已经发布了一个完全相同的问题,但我已经尝试了两种解决方案,而且我无法到达任何地方。)
非常感谢任何帮助!
答案 0 :(得分:0)
提示:使用静态局部变量,或使用递归附加。
如果您一直坚持使用递归,请尝试使用递归来计算阶乘(经典示例)。大多数用途都是从这里消失的。
另外,请不要在这里发布作业。