Java递归填充数组出现StackOverflowError,求解决方法
解决递归填充数组时的StackOverflowError问题
你的代码触发栈溢出的核心原因是递归调用时错误使用了后自增/后自减运算符:
idx++和x--是后序运算符,会先将当前值传递给递归函数,再执行自增/自减操作- 这导致每次递归调用传入的
idx和x都和上一次完全相同,递归终止条件idx>x永远无法满足,最终引发无限递归,耗尽栈内存
修复方案
直接传递更新后的参数值,确保每次递归都能向终止条件靠近:
public int[] genArr(int[] nums, int idx, int x) { // 终止条件:当索引超过目标位置时返回数组 if (idx > x) { return nums; } // 填充当前索引的元素 nums[idx] = idx; // 传递更新后的索引和目标值,替代后自增/自减 return genArr(nums, idx + 1, x - 1); }
调用示例
确保初始化的数组大小能覆盖需要填充的范围,比如要填充0到5的元素,数组大小应为6:
int[] arr = new int[6]; genArr(arr, 0, 5);
内容的提问来源于stack exchange,提问作者casio
相关产品推荐
相关产品推荐

