Я пытаюсь написать рекурсивный алгоритм, который печатает все возможные комбинации номеров символов из мобильного телефона. Как старые добрые телефоны; 2: ABC, 3: DEF и так далее.Ошибка сегментации в рекурсивном алгоритме
Ex 23 должен печатать AD, AE, AF, BD, BE, BF, CD, CE и CF. Я написал следующий алгоритм, и я верю, что он должен работать. Хотя я не знаю, потому что ни один из моих компиляторов не позволит ему закончить.
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
static int totalNbr = 0;
void coolKey(string number, string result)
{
totalNbr++;
string keychar[] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
int nbrSize = number.length();
if (nbrSize == 0) // Basecase - We've reached 0 didgets
{
cout << result << endl;
return;
}
else
{
for (int i = 0; i < keychar[(number[0]-'0')].length(); i++)
{
result += keychar[(number[0]-'0')][i]; // Append char to result.
number = number.erase(0,1); // Remove first didget of the number (eg. "234" becomse "34")
coolKey(number,result); // Call coolKey with the new variables.
}
}
}
int main()
{
coolKey("23", "");
return 0;
}
Выход:
ad
Segmentation fault
Я попытался найти ошибку, и это, кажется, своего рода переполнение стека, или доступ только для чтения памяти - но я не могу похоже, выясняют, где это происходит. Сначала я думал, что это было удаление строковых символов, но это не решило проблему.
Я бы так, если кто-нибудь благодарностью мог бы дать мне подсказку здесь :-)
С наилучшими пожеланиями, Бен
Вы столкнулись с переполнением стека из-за бесконечной рекурсии? Также в качестве эталонного параметра должен быть передан 'result'. –
Это может помочь вам: [Как отлаживать небольшие программы] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) – horns