如何编写以下代码,使其不进行迭代,而是使用递归(即删除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++;
}
}
答案 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);
}
}