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

判断给定Python函数是否为Tail Recursion及实现尾递归数组累加函数

关于尾递归的判断与实现

你的函数是否为尾递归?

是。尾递归的核心特征是递归调用是函数执行的最后一个操作,函数在返回前不需要对递归调用的结果做额外计算。看你的代码:

def addOn(arr, i, j):
    if i<=j:
        arr[i] = arr[i] + arr[i-1]
        return addOn(arr, i+1, j)  # 递归调用是最后一步,直接返回结果
    return arr

当满足i<=j时,修改数组元素后直接返回递归调用的结果,没有后续计算;不满足条件时直接返回数组,完全符合尾递归的定义。

封装为仅接受数组的尾递归函数

如果要实现一个只接收数组参数的尾递归函数,可以把递归逻辑封装为内部辅助函数,自动处理初始调用参数:

def cumulative_sum(arr):
    # 边界情况处理:空数组或单个元素直接返回副本
    if len(arr) <= 1:
        return arr.copy()
    
    def helper(arr_copy, i):
        if i < len(arr_copy):
            arr_copy[i] += arr_copy[i-1]
            return helper(arr_copy, i+1)  # 尾递归调用,无后续操作
        return arr_copy
    
    return helper(arr.copy(), 1)

关键说明

  • 使用arr.copy()是为了避免修改传入的原数组,保证函数的纯函数特性;
  • 辅助函数从索引1开始遍历,因为索引0的元素没有前一个元素,无需修改;
  • 每次递归调用都是函数的最后一步操作,严格符合尾递归要求。

测试示例

test_arr = [1, 2, 3, 4]
print(cumulative_sum(test_arr))  # 输出: [1, 3, 6, 10]
print(test_arr)  # 原数组未被修改: [1, 2, 3, 4]

内容的提问来源于stack exchange,提问作者smileycoolify

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 16:57:10