You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归数组求和函数报错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) 会执行两个操作:

  1. 移除数组的最后一个元素
  2. 返回被移除的整数元素

递归调用 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 12:10:00