如何将我的while循环重写为递归?

时间:2017-02-07 08:55:57

标签: java recursion while-loop iteration

如何编写以下代码,使其不进行迭代,而是使用递归(即删除while循环):

<div class="row">
  <div>Some random div(s)</div>
  <table>
    <tr>
      <td>This will match the rule</td>
    </tr>
  </table>
</div>
<div class="row">
  <div>Some random div(s)</div>
  <h1>Table Title</h1>
  <table>
    <tr>
      <td>This will not match the rule</td>
    </tr>
  </table>
</div>

在这种情况下,while循环是递归还是迭代?我认为它是迭代的,因为它会反复重复参数中字符串的长度。

使用此方法的示例输出可能是:

public static void addSlashes(String str)
{
    int i = 0;

    if (str.length() != 0){
         while (i < str.length()){
              // get character at current 'i' index of string,
              // then adds a "/" after it:
              System.out.print(str.charAt(i) + "/");
              i++;
         }
}

5 个答案:

答案 0 :(得分:5)

使用substring且仅使用String参数:

public static void addSlashes(String str) {
    if (str.isEmpty())
        return;

    System.out.print(str.charAt(0) + "/");
    addSlashes(str.substring(1));
}

请注意,这是一种相当低效的方法,因为它实际上会在大多数Java运行时创建length String个实例。

运行here

答案 1 :(得分:3)

我建议将任务分解为部分

  • 斜线插入
  • 输出

你已经知道的输出部分,如果你能用Java编写一个hello-world程序(似乎就是这种情况)。

这是与输出隔离的削减部分。

public static String slashed(String s) {
    if (s.length() > 0){
        return s.charAt(0)+"/"+slashed(s.substring(1));
    }
    return s;
}

它需要一个字符串,并在每个单个char(以递归)方式后添加斜杠。正在运行的示例如下:http://ideone.com/YUrGMy

声明

要求提供基于字符串的递归解决方案。但是,如果使用稍微更高效的迭代方法,以这种方式构建字符串效率也不高。两者都在不必要地分配和移动内存。如果您对这类任务的实际解决方案感兴趣,请查看Java的StringBuffer类。

答案 2 :(得分:2)

试试这个

public static void addSlashes(String str, int len) {
     if(len < str.length()) {
         System.out.print(str.charAt(len) + "/");
         addSlashes(str, len +1);
     }
}


调用如: -

addSlashes("hello", 0);


样本输出

h/e/l/l/o/

答案 3 :(得分:0)

这是......

public static void main(String[] args) {
    addSlashes("Hello");
    System.out.println("\n");
    addSlashRecursive("Hello");
}

static void addSlashes(String str) {
    int i = 0;

    if (str.length() != 0) {
        while (i < str.length()) {
            System.out.print(str.charAt(i) + "/");
            i++;
        }
    }
}

static void addSlashRecursive(String s){
    addSlashRecursive(s, 0);
}

static void addSlashRecursive(String s, int pos){
    System.out.print(s.charAt(pos)+"/");
    if(pos != s.length()-1){
        addSlashRecursive(s, pos+1);
    }
}

答案 4 :(得分:0)

static void addSlashes(String str) {
    System.out.println(str.charAt(0) + "/");
    int length = str.length();
    int i = 1;
    if (length > i) {
        str = str.substring(i, str.length());
        addSlashes(str);
    }
}