Coding Bat Recursion exercise (java)

Tags: , ,



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") → ""

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.



Source: stackoverflow