簡體   English   中英

簡單的遞歸代碼將無法正常工作

[英]Simple recursion code that wont work

我寫了一個遞歸代碼,但我不知道為什么它不起作用(我改變了以前的一些錯誤,但仍然不起作用:()

問題是:

寫一個遞歸方法

一種。 打印字符串兩次反轉的每個字符b。 doubleReverse(“ hello”)打印oolllleehh

到目前為止,我的代碼如下:

public class Recursion{
    public static void main(String[] args) {
        String s = "hello"; 
        doubleReverse(s); 
    }

    public static void doubleReverse(String s) {
        if (s == null || s.equals("")){
        return; 
    }

    System.out.print(s.charAt(s.length()-1) + s.charAt(s.length()-1) + doubleReverse(s.substring(1)));  
    }
}

預期的輸出doubleReverse("hello")輸出olllleehh

我得到的輸出是:無法編譯

錯誤信息:

找到2個錯誤:

File: /Users/jaeahn/Desktop/CSCI /Practice/Recursion.java  [line: 12]
Error: /Users/jaeahn/Desktop/CSCI /Practice/Recursion.java:12: reference to print is ambiguous, both method print(char[]) in java.io.PrintStream and method print(java.lang.String) in java.io.PrintStream match

File: /Users/jaeahn/Desktop/CSCI /Practice/Recursion.java  [line: 12]
Error: /Users/jaeahn/Desktop/CSCI /Practice/Recursion.java:12: 'void' type not allowed here

您不需要返回任何內容,但是您每次都需要傳遞一個較小版本的字符串,直到您打印完所有字符為止。 這是一個實現...

public static void recurse(String str){
    if(str.length() > 0) {
        System.out.print(str.charAt(str.length()-1));
        System.out.print(str.charAt(str.length()-1));
        recurse(str.substring(0, str.length() - 1));
    }
}

您的程序有錯誤,因為void方法返回對象“ null”:

public static void doubleReverse(String s) {    // <-- void method.
    if (s == null || s.equals("")) {
        return;                                 // <-- return object "null".
    }
}

在這種情況下,您不需要遞歸。

public class Solution {

    public static String reverseWords(String sentence) {
        String[] parts = sentence.split("");
        StringBuilder builder = new StringBuilder();
        builder.append(parts[parts.length - 1]).append(parts[parts.length - 1]);
        for (int i = parts.length - 2; i >= 0; --i) {
            builder.append("").append(parts[i]).append(parts[i]);
        }
        return builder.toString();
    }

    public static void main(String[] args) {
        System.out.println(reverseWords("hello"));
    }

}

//  Result:
//  oolllleehh


如果您想使用遞歸

public class Solution {

    public static String reverse(String str) {
        String reverse = "";
        if (str.length() == 1) {
            return (str + str);
        } else {
            reverse += str.charAt(str.length() - 1);
            reverse += str.charAt(str.length() - 1) + reverse(str.substring(0, str.length() - 1));            
            return reverse;
        }
    }

    public static void main(String[] args) {
        System.out.println(reverse("hello"));
    }

}

//  Result:
//  oolllleehh

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM