![](/img/trans.png)
[英]How to recursively take an input string and return a string with each character repeated?
[英]How to recursively print out each character one at a time in a String function
我试图通过使用字符串函数来更好地理解递归特性。 我正在尝试创建一个 function 递归地一次打印一个字符,直到堆栈到达字符串的末尾。 例如,输入看起来像这样:
String str = "Hi";
//Output:
H
i
我一直在练习使用 Int 函数进行递归,并且一直在慢慢尝试使用 String 函数来简化理解递归的方式。 我对如何准确调用 function 来增加或减少感到困惑。 使用 Int 函数很容易使用这种方法。
int function(int N){
return function(N+1);
}
这是我拥有的当前代码。
String str = "Hi";
public String forward(String str){
if(str.equals(null) || str.length()<2) return str;
System.out.println(str.charAt(0));
return forward(str.substring(0, str.length()-1));
}
预期的 output 应该是:
H
i
但是当前的 output 是:
H
H
感谢您的时间和耐心,非常感谢任何帮助或指导。
因为您每次都使用相同的String
进行递归。 您实际上想跳过第一个字符。 而且你不需要返回任何东西。 方法应该是static
。 并且不要使用Object.equals(null)
- 这会给你一个NullPointerException
上null
。 就像是,
public static void forward(String str) {
if (str == null || str.isEmpty()) {
return;
}
System.out.println(str.charAt(0));
forward(str.substring(1));
}
输出
H
i
为了创建递归方法,您必须实现递归逻辑的两个关键部分: BASE CASE和RECURSIVE CASE 。
基本情况 - 由预先知道结果的输入表示。 在这种情况下,它是字符串的结尾。
递归案例 - 是您的逻辑所在的位置,以及进行递归调用的位置。
public static void main(String[] args) {
printStr("test");
}
public static void printStr(String str) {
if (str.isEmpty()) return;
helper(str, 0);
}
private static void helper(String str, int i) {
if (i >= str.length()) return;
System.out.println(str.charAt(i));
helper(str, i + 1);
}
递归 function 从同一个 function 中调用自身。 function 最终需要有办法逃脱,否则会出现 StackOverFlowError。
public static void main(String[] args) {
printStr("Hi");
}
private static String printStr(String s) {
if (s == null || s.length() == 0) {
return null;
}
System.out.println(s.charAt(0));
return s.length() >= 1 ? printStr(s.substring(1)) : null;
}
在您的代码中: 1.first cycle:str is "Hi";then print "H";then str.substring(0, str.length()-1) is H 2.second cycle:str is "H";then返回并结束递归并且什么都不做
修复你的代码:
public static String forward(String str) {
if (str.length() == 0) {
return null;
}
System.out.println(str.charAt(0));
return forward(str.substring(1));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.