如何解决判断数组是否有序的递归代码栈溢出错误?
解决递归判断有序数组时的栈溢出问题
你的递归代码处理长度3565的大数组时触发了递归深度超限(栈溢出)——Python默认递归深度限制约为1000,数组长度远超过这个值,导致递归调用栈撑爆,抛出回溯错误。
原代码的问题
每次递归都执行arr[1:]切片操作,不仅会创建新数组浪费内存,还让递归深度等于数组长度,直接触发Python的递归深度限制。
解决方案
方案一:改用迭代实现(推荐)
迭代完全没有递归深度限制,效率更高:
class Solution: def arraySortedOrNot(self, arr, n): if n <= 1: return True for i in range(n - 1): if arr[i] > arr[i + 1]: return False return True
方案二:优化递归逻辑(保留递归的情况下)
通过传递索引代替数组切片,避免创建新数组,同时控制递归深度:
class Solution: def arraySortedOrNot(self, arr, n): def helper(index): if index == n - 1: return True if arr[index] > arr[index + 1]: return False return helper(index + 1) return helper(0) if n > 1 else True
补充说明
- 迭代方案时间复杂度O(n),空间复杂度O(1),是处理这类问题的最优选择
- 若一定要用递归,不建议手动修改
sys.setrecursionlimit()来提升深度限制——这个操作可能导致程序崩溃或其他未知问题
内容的提问来源于stack exchange,提问作者Himanshi Muley
相关产品推荐
相关产品推荐

