Рекурсивный калькулятор анаграмм C++

Я пытаюсь создать программу, которая по заданному слову может вычислять и печатать каждую комбинацию букв. Чтобы быть более конкретным, меня просят использовать рекурсивную функцию, и я должен получить что-то вроде этого:

Дано слово: ДОМ

ЭХОМ

ЭМО

МЕХО

Подход, который я использую, чтобы поменять местами содержимое #x с #x+1, как это

строка[0]->строка[1]

строка[0]->строка[2]

Это то, что я придумал

void anagram(char * s, int len, int y)
{
char temp; //used to store the content to swap betwen the two 

if (len < 0) //when the total lenght of the array gets to 0 it means that every single swap has been made
    return;

temp = s[len]; //swapping
s[len] = s[y];
s[y] = temp;

puts(s); //prints the string

if (y == 0)                     
    return anagram(s, len-1, y - 1);

return anagram(s, len, y - 1);

}

То, что я получаю, это просто огромный беспорядок и точка останова от VS (если не сбой).

Может кто-нибудь помочь мне, пожалуйста?


person riccardocasali    schedule 01.10.2015    source источник
comment
Возможный дубликат Как сгенерировать все перестановки массив в отсортированном порядке?   -  person Lorenzo Belli    schedule 01.10.2015
comment
Как вы делаете первоначальный вызов вашей функции? anagram("HOME", ?, ?); Что ставится вместо вопросительных знаков?   -  person pcarter    schedule 01.10.2015
comment
Анаграмма @pcarter(HOME, stringlen(s), stringlen(s)) где s — строка   -  person riccardocasali    schedule 01.10.2015
comment
anagram("HOME", stringlen(s), stringlen(s)) Предполагая, что stringlen(s) будет возвращать длину вашей строки (т.е. 4 в этом примере), у вас возникнут проблемы при индексировании строки с помощью s[len]. Помните, что массивы C++ отсчитываются от 0, поэтому максимально допустимый индекс имеет длину - 1.   -  person atkins    schedule 01.10.2015
comment
Мне очень понравилось возвращаться к этому вопросу и спрашивать себя, какого черта я пытался достичь...   -  person riccardocasali    schedule 16.05.2018