Problem with recursion

G

Gaijinco

I'm trying to do a function that returns a string which is a string the
characters in inverse order of the one given as a parameter. It
compiles but it crashes! Can anyone help me?

string inverse(string s, int pos, int size)
{
if(pos==size-1)
return s;
else
{
int idx = s.size()-1;
char character = s.at(idx);
s.erase(idx);
s.insert(s.begin()+pos,character);
inverse(s,pos+1,size);
}
}
 
M

Maxim Yegorushkin

Gaijinco said:
I'm trying to do a function that returns a string which is a string the
characters in inverse order of the one given as a parameter. It
compiles but it crashes! Can anyone help me?

string inverse(string s, int pos, int size)
{
if(pos==size-1)

Better:

if(pos >= size)
return s;
return s;
else
{
int idx = s.size()-1;
char character = s.at(idx);
s.erase(idx);
s.insert(s.begin()+pos,character);
inverse(s,pos+1,size);

This probably should be:

inverse(s, pos + 1, size - 2);
 
D

davidrubin

Gaijinco said:
I'm trying to do a function that returns a string which is a string the
characters in inverse order of the one given as a parameter. It
compiles but it crashes! Can anyone help me?

string inverse(string s, int pos, int size)

Your implementation make far too many copies, and the contract is
unclear. If I had to guess, I'd say it returns a string which is a copy
of the characters s[pos]..s[pos+size] reversed. Is this what you mean?
 
G

Gaijinco

Yeah, if you input carlos it would output solrac but there is something
quite odd, this works fine:

void inverse(string s, int pos, int size)
{
if(pos==size-1)
{
cout << s;
return s;
}
else
{
int idx = s.size()-1;
char character = s.at(idx);
s.erase(idx);
s.insert(s.begin()+pos,character);
inverse(s,pos+1,size);
}
}

But if I try to return the string, then the program crashes. I'm not
sure why is that!
 
H

Howard

Gaijinco said:
Yeah, if you input carlos it would output solrac but there is something
quite odd, this works fine:

void inverse(string s, int pos, int size)
{
if(pos==size-1)
{
cout << s;
return s;
}
else
{
int idx = s.size()-1;
char character = s.at(idx);
s.erase(idx);
s.insert(s.begin()+pos,character);
inverse(s,pos+1,size);
}
}

But if I try to return the string, then the program crashes. I'm not
sure why is that!

You defined the function as void, but then have a "return s" statement in
the first part.

If it is supposed to return a string, then define it to return a string.
And then you also need a return statement for the else condition. (Probably
"return inverse(s,pos+1,size):"? I haven't tested the thought.)

If it is not supposed to return a string, then it should be operating on s
directly, and never returning a value. In that case, make s a string&
instead, and change "return s;" to just "return;".

-Howard
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top