How can I solve this problem recursively instead of using the replace method? I’m trying to get better a recursive methods.
Given a string, compute recursively (no loops) a new string where all the lowercase ‘x’ chars have been changed to ‘y’ chars.
changeXY("codex") → "codey"
changeXY("xxhixx") → "yyhiyy"
changeXY("xhixhix") → "yhiyhiy"
I cheated and solved it this way and tried to look at the source code for Java String method replace but I didn’t understand it. Here’s my method.
public String changeXY(String str) {
int len = str.length();
int i = 0;
String changedStr = str.replace("x","y");
if (len == 0)
return str;
return changedStr;
}
Any ideas on how to do it a recursive way?
Here’s a bonus exercise that I didn’t know how to do either. Thank you for your help!!!
Given a string, compute recursively a new string where all the ‘x’ chars have been removed.
noX("xaxb") → "ab"
noX("abc") → "abc"
noX("xx") → ""
Advertisement
Answer
Recursion is almost always composed of two things:
A condition to stop the recursion.
assuming we can solve a smaller problem, how to solve the current one using that assumption.
public String changeXY(String str) {
// when to stop
if (str.length() == 0){
return str;
}
// handle the "special case" using an assumption we can solve str.substring(1)
if (str.charAt(0) == 'x'){
return 'y' + changeXY(str.substring(1));
}
// handle the "simple" case using an assumption we can solve str.substring(1)
return str.charAt(0) + changeXY(str.substring(1));
}
Other exercises are very easy once you realize how this works.