![](/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.