递归数组求和函数报错TypeError:int对象无len()方法排查
递归计算数组总和时出现TypeError: object of type 'int' has no len()的解决办法
问题代码
arr1 = [1, 2, 3, 4, 5, 6] def rec_sum(arr): if len(arr) == 0: return 0 else: return(arr[len(arr) - 1] + rec_sum(arr.pop(len(arr) - 1))) print(rec_sum(arr1))
错误原因
arr.pop(len(arr)-1) 会执行两个操作:
- 移除数组的最后一个元素
- 返回被移除的整数元素
递归调用 rec_sum(arr.pop(...)) 时,传入的是这个整数,而整数没有 len() 方法,因此触发 TypeError。
修正方案
方案1:使用数组切片(不修改原数组)
通过切片 arr[:-1] 获取去掉最后一个元素的新数组,递归传递这个新数组,同时保留原数组不变:
arr1 = [1, 2, 3, 4, 5, 6] def rec_sum(arr): if len(arr) == 0: return 0 # 取最后一个元素,递归传递去掉最后一个元素的子数组 return arr[-1] + rec_sum(arr[:-1]) print(rec_sum(arr1)) # 输出:21 print(arr1) # 原数组未被修改,输出:[1, 2, 3, 4, 5, 6]
方案2:使用pop但传递修改后的数组(会修改原数组)
如果可以接受原数组被修改,先把pop返回的元素存起来,再递归传递修改后的数组:
arr1 = [1, 2, 3, 4, 5, 6] def rec_sum(arr): if len(arr) == 0: return 0 last_element = arr.pop() # 默认移除并返回最后一个元素,无需指定索引 return last_element + rec_sum(arr) print(rec_sum(arr1)) # 输出:21 print(arr1) # 原数组已被清空,输出:[]
内容的提问来源于stack exchange,提问作者noname
相关产品推荐
相关产品推荐

