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.