首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编码Bat Recursion练习(java)

编码Bat Recursion练习(java)
EN

Stack Overflow用户
提问于 2015-01-02 23:27:38
回答 8查看 5.3K关注 0票数 2

如何用递归方法代替替换方法来解决这个问题?我想得到更好的递归方法。

给定一个字符串,递归地计算(没有循环)一个新的字符串,其中所有小写的'x‘字符都被更改为'y’字符。

代码语言:javascript
运行
复制
changeXY("codex") → "codey"
changeXY("xxhixx") → "yyhiyy"
changeXY("xhixhix") → "yhiyhiy"

我用这种方式欺骗并解决了它,并试图查看Java方法替换的源代码,但我不理解它。这是我的方法。

代码语言:javascript
运行
复制
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;

}

对于如何以递归的方式实现它,有什么想法吗?

这是一个奖金练习,我也不知道怎么做。谢谢你的帮助!

给定一个字符串,递归地计算一个新字符串,其中所有的“x”字符都被删除了。

代码语言:javascript
运行
复制
noX("xaxb") → "ab"
noX("abc") → "abc"
noX("xx") → ""
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2015-01-02 23:32:30

递归几乎总是由两件事组成:

停止递归的条件。

假设假设,我们可以解决一个较小的问题,如何用这个假设来解决当前的问题。

代码语言:javascript
运行
复制
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));
}

一旦你意识到这是如何工作的,其他的练习就很容易了。

票数 6
EN

Stack Overflow用户

发布于 2015-01-02 23:48:11

递归基于两件事: 1-基情况:这将阻止方法通过一定的条件2-操作调用自己:通过此方法要做的事情+再次调用该方法,并将其参数更改为基本情况。在这种情况下,您必须执行以下操作

代码语言:javascript
运行
复制
public String changeXY(String string){

    string = string.toLowerCase();
    if(string.length()==0)
    { 
        return string;
    }
    else if (str.charAt(0) == 'x')
    {
        return 'y' + changeXY(str.substring(1));
    }

    return str.charAt(0) + changeXY(str.substring(1)); 
}
票数 3
EN

Stack Overflow用户

发布于 2015-01-02 23:37:19

伪码:

代码语言:javascript
运行
复制
  changeXY(input) {
    if (input.isEmpty()) return "";
    head = "firstChar"(input);
    tail = "theRest"(input);
    return (head == 'x' ? 'y' : head) + changeXY(tail);
  }


  noX(input) {
    if (input.isEmpty()) return "";
    head = "firstChar"(input);
    tail = "theRest"(input);
    return (head == 'x' ? '' : head) + noX(tail);
  }

您所要做的就是实现或调用适当的Java,而不是"firstChar“和"theRest”。(我相信这是小菜一碟;)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27749981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档