我不得不设计一个只使用递归(无循环)的标尺。用户输入刻度线的标尺长度和深度(高度)。我设法使用简单的 for 和 while 循环很好地构建了它,但是当我尝试将其转换为递归时,我遇到了一些麻烦。在运行文件结束时,我得到一个堆栈溢出和第一次机会异常,但是,就在错误杀死它之前,我得到了正确的输出。我一直在使用测试用例长度:4 和深度:5,长度:12 和深度:3。
如果有人知道我在递归工作中搞砸了多少,我会全神贯注。
#include <iostream>
#include <string>
using namespace std;
void solve (int, int, int, string, int);
int main()
{
int depth, length;
cout << "Enter a ruler length: ";
cin >> length;
cout << endl << "Enter a marking depth: ";
cin >> depth;
int i = 0;
string ruler = "";
int size = length * pow(2, (depth-1));
solve(length, depth, i, ruler, size);
int x;
cin >> x;
return 0;
}
void solve (int length, int depth, int i, string ruler, int size)
{
if (depth > 0)
{
int inc = pow(2, depth-1);
if (i <= (size))
{
if (i % inc == 0) {
cout << "|";
}
if (i % inc != 0) {
cout << " ";
}
solve (length, depth, ++i, ruler, size);
}
cout << "\n";
}
solve (length, depth-1, 0, ruler, size);
}