我試圖通過使用字串函式來更好地理解遞回特性。我正在嘗試創建一個函式,該函式一次遞回列印一個字符,直到堆疊到達字串的末尾。例如,輸入看起來像這樣:
String str = "Hi";
//Output:
H
i
我一直在練習使用 Int 函式進行遞回,并且一直在慢慢嘗試使用 String 函式來簡化理解遞回的方式。我對如何準確呼叫函式來增加或減少感到困惑。使用 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));
}
預期的輸出應該是:
H
i
但相反,當前的輸出是:
H
H
感謝您的時間和耐心,非常感謝任何幫助或指導。
uj5u.com熱心網友回復:
因為你String每次都在遞回。您實際上想跳過第一個字符。而且你不需要回傳任何東西。而且方法應該是static。并且不要使用Object.equals(null)- 那會給你一個NullPointerExceptionon 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
uj5u.com熱心網友回復:
為了創建遞回方法,您必須實作遞回邏輯的兩個關鍵部分: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);
}
uj5u.com熱心網友回復:
遞回函式從同一個函式中呼叫自身。該函式需要有一種最終逃逸的方法,否則會出現 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;
}
uj5u.com熱心網友回復:
在您的代碼中: 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));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/412573.html
標籤:
