繁体   English   中英

为什么++运算符在我的递归方法中导致堆栈溢出,而+1却没有?

[英]Why does the ++ operator cause a stack overflow in my recursive method yet +1 does not?

因此,我今晚才在学校参加了CS测试,我不得不写一个递归方法来在数组中找到最大值。

这是我想出的:

public static int getMax(int[] a, int max, int index)
    {
        if(index == a.length)
        {
            return max;
        }
        if(a[index] > max)
        {
            max = a[index];
        }
        return getMax(a, max, index++);
    }

那就是我在上交的纸上放的东西,但是瞧瞧我回到家并将其放在我的IDE中进行尝试,看看它是否有效,并且我得到了堆栈溢出的信息。 因此,我做了一些测试,最后将第二个返回值更改为:

return getMax(a, max, index+1);

并且没有更多的堆栈溢出。

为什么++运算符会破坏该方法?

谢谢

在评估变量 ,后缀形式的++递增。 您正在将索引的当前值传递到递归调用中,然后在父函数中本地将其递增。 换句话说,您一直将相同的索引值传递给越来越多的递归调用,直到用完堆栈。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM