Java 如何将While循环重新写入递归?
如何编写以下代码,使其不进行迭代,而是使用递归(即删除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
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
实例
运行它。我建议将任务分成几个部分
- 斜杠插入
- 输出
public static String slashed(String s) {
if (s.length() > 0){
return s.charAt(0)+"/"+slashed(s.substring(1));
}
return s;
}
它接受一个字符串,并以递归方式在每个字符后添加斜杠。运行示例如下:
免责声明
您要求的是基于字符串的递归解决方案。但是,如果您使用稍微更有效的迭代方法,那么以这种方式构建字符串是没有效率的。两者都在不必要地分配和移动内存。如果您对此类任务的实际解决方案感兴趣,请查看Java类。我建议将任务分解为多个部分
- 斜杠插入
- 输出
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(视觉)演示了我们在那里处理字符串的所有长度…非常感谢--您提供的链接帮助我了解了它的实际工作原理,因此我选择了您的答案。非常感谢--您提供的链接帮助我了解它的实际工作原理,因此我选择了您的答案。