递归 - 使用一种方法将字符串输入的每个字符串加倍,然后剪切最后一个字符

时间:2014-03-26 18:56:55

标签: java recursion

我有以下问题。

递归方法public static String doSomeMagic(" Test")应该返回:

TTeesstt
TTeess
TTee
TT

我已经像这样实现了这种行为:

public static String rowFunction(String s) {
    String toReturn = new String();

    if (!s.isEmpty()) {
        toReturn = String.valueOf(s.charAt(0));
        toReturn += toReturn + rowFunction(s.substring(1));
    }
    return toReturn;
}

public static String doSomeMagic(String s) {
    String toReturn = new String();

    if (!s.isEmpty()) {
        toReturn = rowFunction(s) + "\n" + doSomeMagic(s.substring(0, s.length() - 1));
    }
    return toReturn;
}

如何通过一个功能实现这一目标?有什么想法吗?

3 个答案:

答案 0 :(得分:1)

要在一个函数中执行此操作,只需遍历字符串而不是调用另一个递归函数。

public static String doSomeMagic(String s) {
    String doubled = new String();
    if (s.length() == 0) return s;
    for(int i=0;i<s.length();i++)
        doubled += s.substring(i,i+1) + s.substring(i,i+1)
    return doubled + "\n" + doSomeMagic(s.substring(0, s.length()-1));
}

答案 1 :(得分:1)

我注意到你想在没有循环和一个函数调用的情况下这样做。你可以把它清理得更多。这是:

public static String doSomeMagic(String s) {
    if (!s.isEmpty()) {
        StringBuffer sb = new StringBuffer();
        return sb.append(s.replaceAll("(\\S)", "$1$1"))
                 .append("\n")
                 .append(doSomeMagic( s.replaceAll(".$", "") )
                 .toString();
    }
    return "";
}

答案 2 :(得分:-1)

快速解决方案可能就像

testMethod(string ip){
    if(ip.length()==1){
        ip=ip.toUppercase();
    }
    For(int i=0;i<ip.length()-1;i++){
        System.out.print(ip.charAt(i)+""+ip.charAt(i));
    }
    if(ip.length()>1){
        System. out. println();
        testMethod(ip.substring(1));
    }
}

Haven没有对它进行测试......但应该公平地工作