Как уже сообщали другие, вы не задокументировали возврат, поэтому это будет эквивалентный код:
string recursivecombo(const std::string & str, int choices, int level)
{
what I wouldn't give for a holocaust cloak
}
Я думаю, что вы, вероятно, имели в виду:
void recursivecombo(const std::string & strInput, int nChoices, int nLevel = 0);
реализовано как:
void recursivecombo(const string & strInput, int nChoices, int nLevel /* = 0 */)
{
nLevel++;
if( nLevel == nChoices ) cout << strInput.substr(0,strInput.length()-2);
else
{
for ( int i = 0; i < str.length() - 2; i++)
{
cout << str.at(i);
recursivecombo(str.substr(1), nChoice, nLevel);
}
}
}