如何在没有任何for循环的情况下递归地解压缩字符串?

时间:2014-12-07 22:37:44

标签: java recursion compression

对于我的任务,我必须能够递归地解压缩一个字符串,而不是for循环。我在尝试限制自己使用for循环时遇到了一些麻烦,如果我能得到一些帮助,我会很感激。接近尾声,我有一个for循环,我想知道是否有一种方法可以用其他东西删除它,仍然让我的程序做我打算做的事情

public class StringRec {
    public static void main(String[] args) {
        System.out.println("What text do you want to decompress?");
        String compressedText = IO.readString();
        System.out.println(decompress(compressedText));
    }
    public static String decompress(String compressedText) {
        if (compressedText.length()<=1){
            return compressedText;
        }
        String first=""; 
        String rest=""; 
        char c = compressedText.charAt(0); 
        if (Character.isLetter(c) == true) {
            first = compressedText.substring(0,1); 
            rest = compressedText.substring(1); 
            return first + decompress(rest); 
        } else { 
            first = compressedText.substring(1,2); 
            rest = compressedText.substring(2); 
            int x = compressedText.charAt(0)-'0'; 
            char y = compressedText.charAt(1);
            String tst = "";

            for(int i = 0; i < x; i++) {
                tst = tst+y;
            }

            return tst + decompress(rest); 
        } 
    }
}

2 个答案:

答案 0 :(得分:1)

使用while循环执行相同的操作。

int i = 0;
while(i < x) {
    i++;
    tst += y;
}

如果你不能完全使用循环,那就使用递归。

int i = 0;

public String recursiveAppend(String tst) {
    if(i >= x) {
        i = 0;
        return tst;
    }
    else return recursiveAppend(tst + y);
}

如果你正在使用&gt; Java 1.5,然后使用String tst = new String(new char[x]).replace('\0', y);。 (来自here

答案 1 :(得分:0)

如果它是尾递归的话,递归到救援,奖励点:

 String tst = repeat(y, x, "");

...

private String repeat(y, x, b) {
    if (x == 0) {
        return b;
    }
    return repeat(y, x - 1, b + y) ;
}