java.lang.stackoverflowerror递归

时间:2016-02-09 04:29:17

标签: java recursion

StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {

                    Log.e("RESPONSE", response);


                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

            // Error handling
            error.printStackTrace();

        }
    });

    // Add the request to the queue
    Volley.newRequestQueue(this).add(stringRequest);

嗨,每当我尝试运行以下代码时,我都会收到stackoverflow错误。如果数组中有任何两个数字总和为k值,则返回true,但我似乎无法找到错误。任何帮助将不胜感激。这又是什么运行时间?

2 个答案:

答案 0 :(得分:1)

的情况下,您需要一个基本案例来结束递归(返回false)
k == A[i]+A[n-1-i] 

永远不会成真。

n == 1不是那种基本情况,因为n在递归期间不会改变...一个基本情况,它取决于递归期间变化的变量

答案 1 :(得分:0)

您的代码存在多个问题。尚未指出的一点是你认为你通过在最后一个参数中加1来递归调用该方法,但你不是。这一行:

return addition(A, n, k, i++);

有一个后增量运算符。这意味着它会向i 添加1,但会使用旧值i 作为参数。所以它与:

相同
int oldValueOfI = i;
i = i + 1;
return addition(A, n, k, oldValueOfI);

你可以看到你用上次调用的完全相同的值递归调用该方法,所以它当然会无限递归。虽然我不会为这个程序使用递归,但是如果你真的想要,请将调用更改为

return addition(A, n, k, i + 1);

之后您不会使用i,因此您无需更改该值。 (请注意,每个递归调用都有自己的i变量;调用之间不共享变量。因此递增i不会对下一个递归调用使用的i产生任何影响,先前的递归调用,或任何其他递归调用。)

另请注意,这不会解决您的问题,但进行此更改可能会帮助您在程序开始爆发其他异常时找出下一步操作。