Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将While循环重新写入递归?_Java_Recursion_While Loop_Iteration - Fatal编程技术网

Java 如何将While循环重新写入递归?

Java 如何将While循环重新写入递归?,java,recursion,while-loop,iteration,Java,Recursion,While Loop,Iteration,如何编写以下代码,使其不进行迭代,而是使用递归(即删除while循环): 试试这个 public static void addSlashes(String str, int len) { if(len < str.length()) { System.out.print(str.charAt(len) + "/"); addSlashes(str, len +1); } } 样本输出 h/e/l/l/o/ 试试这个 publi

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

试试这个

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

样本输出

h/e/l/l/o/
试试这个

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

样本输出

h/e/l/l/o/
这是

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);
    }
}
publicstaticvoidmain(字符串[]args){
addSlashes(“你好”);
System.out.println(“\n”);
addslashreshive(“Hello”);
}
静态void addSlashes(字符串str){
int i=0;
如果(str.length()!=0){
而(i
在这里

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);
    }
}
publicstaticvoidmain(字符串[]args){
addSlashes(“你好”);
System.out.println(“\n”);
addslashreshive(“Hello”);
}
静态void addSlashes(字符串str){
int i=0;
如果(str.length()!=0){
而(i
使用
子字符串
,并且仅使用
字符串
参数:

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

    System.out.print(str.charAt(0) + "/");
    addSlashes(str.substring(1));
}
请注意,这是一种效率相当低的方法,因为它实际上会在大多数Java运行时中创建
length
String
实例


运行它。

使用
子字符串
,并且只使用
字符串
参数:

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

    System.out.print(str.charAt(0) + "/");
    addSlashes(str.substring(1));
}
请注意,这是一种效率相当低的方法,因为它实际上会在大多数Java运行时中创建
length
String
实例


运行它。

我建议将任务分成几个部分

  • 斜杠插入
  • 输出
如果您能够用Java编写hello world程序,您已经知道的输出部分(似乎就是这样)

这里是斜线部分,与输出隔离

public static String slashed(String s) {
    if (s.length() > 0){
        return s.charAt(0)+"/"+slashed(s.substring(1));
    }
    return s;
}
它接受一个字符串,并以递归方式在每个字符后添加斜杠。运行示例如下:

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

我建议将任务分解为多个部分

  • 斜杠插入
  • 输出
如果您能够用Java编写hello world程序,您已经知道的输出部分(似乎就是这样)

这里是斜线部分,与输出隔离

public static String slashed(String s) {
    if (s.length() > 0){
        return s.charAt(0)+"/"+slashed(s.substring(1));
    }
    return s;
}
它接受一个字符串,并以递归方式在每个字符后添加斜杠。运行示例如下:

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

它将打印H/e/l/l/o/Hint:要使其递归,您必须始终在实际方法体中使用参数字符串的第一个字符。如果字符串为“”,while块将永远不会执行,因为0不小于0并且
i
为0Oh哇,是的,它应该是公共的。这是一个输入错误,很抱歉……注意:虽然可以递归地编写此函数,但不应该,因为重复使用子字符串是一种低效的操作。只对字符进行迭代更好。它将打印H/e/l/l/o/提示:要使其递归,必须始终使用实际方法体中参数字符串的第一个字符。如果字符串为“”,则while块将永远不会执行,因为0不小于0且
i
为0Oh哇,是的,它应该是公共的。这是一个输入错误,很抱歉……注意:虽然可以递归地编写此函数,但不应该,因为重复使用子字符串是一种低效的操作。只对字符进行迭代要好得多。是否可以只使用一个参数(String str)?是否可以只使用一个参数(String str)?变量
i
似乎有点多余。是的,就是这样;
i
变量似乎有点多余;有人可能会说应该首选
isEmpty()
方法,但我不确定这一点,考虑到
length()
(视觉上)说明我们在那里处理字符串的所有长度……有人可能会说应该首选
isEmpty()
方法,但考虑到
length(),我不确定这一点
into account(视觉)演示了我们在那里处理字符串的所有长度…非常感谢--您提供的链接帮助我了解了它的实际工作原理,因此我选择了您的答案。非常感谢--您提供的链接帮助我了解它的实际工作原理,因此我选择了您的答案。