首页 > 代码库 > 算法问题——递归算法

算法问题——递归算法

今天在做项目用到一个递归,竟然做了许久没有找到算法的错误之处,记录下。有空在思考下……

下面是错误代码:

功能是如果字符串以RTS_Mon->结尾,就截去最后面的 RTS_Mon->

处理结果应该为:1 RTS_Mon-> 2 RTS_Mon-> 3 RTS_Mon-> 4 RTS_Mon-> 5 RTS_Mon-> 6 RTS_Mon-> 7 RTS_Mon->" + "\r\n"+"RTS_Mon-(Admin)>

 String   str="1 RTS_Mon->  2 RTS_Mon->  3  RTS_Mon->   4  RTS_Mon->  5  RTS_Mon->  6  RTS_Mon->  7  RTS_Mon->" +
            "\r\n"+"RTS_Mon-(Admin)>   RTS_Mon->    RTS_Mon->RTS_Mon->";

 

public String jieQu(String data) {
        if (data.trim().endsWith("RTS_Mon->")) {
            data= data.substring(0, data.trim().length() - 9).trim();
            Log.i(TAG, "onCreate: 当前数据:" + temp);
            jieQu(temp);

        }else{
            Log.i(TAG, "onCreate: 当前数据else:" + data);
            return data;
        }

    return null;
    }

代码错误之处是: Log.i(TAG, "onCreate: 当前数据else:" + data);这里打印的数据为正确数据,但是运行到return data;后,竟然还会集训往下跑,运行到了return null;并执行了多次return null;

后修改代码为如下,则正常运行。

 public String jieQu(String data) {
        if (data.trim().endsWith("RTS_Mon->")) {
             data = data.substring(0, data.trim().length() - 9).trim();
            Log.i(TAG, "onCreate: 当前数据:" + data);
            return jieQu(data);

        }else{
            Log.i(TAG, "onCreate: 当前数据else:" + data);
            return data;
        }


    }

看错误代码<!---->

 public String jieQu(String data) {
        Log.i(TAG, "函数:*******");
        if (data.trim().endsWith("RTS_Mon->")) {
             data = data.substring(0, data.trim().length() - 9).trim();
            Log.i(TAG, "onCreate: 当前数据:" + data);
            jieQu(data);

        }else{
            Log.i(TAG, "onCreate: 当前数据else:" + data);
            return data;
        }

        Log.i(TAG, "返回:*******");
        return  null;

    }

当字符串最后面更有6个RTS_Mon->时,则需要进入jieQu()方法7次, Log.i(TAG, "函数:*******");打印出7次。Log.i(TAG, "返回:*******");会走6次,

Log.i(TAG, "onCreate: 当前数据else:" + data),走一次。

进入if(){}后,走完代码,都会走return null;只有最后一次走入 else{} return data;

 

算法问题——递归算法