# Coding Bat Recursion exercise (java)

#### Tags: java, recursion, string

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

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