0

我不得不设计一个只使用递归(无循环)的标尺。用户输入刻度线的标尺长度和深度(高度)。我设法使用简单的 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);    
}
4

1 回答 1

2

您需要solve递归函数的返回点,例如:

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";            
    }
    else
    {
         return; //<<<---- return out  
    }

    solve (length, depth-1, 0, ruler, size);    
}
于 2013-02-03T03:40:43.937 回答