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

如何递归计算点积?解决递归实现中的无限递归问题

递归实现点积的问题解决

我需要编写一个递归计算点积的函数,目前已实现最多支持4维的非递归版本,但尝试递归实现时出现无限递归错误。我尝试调整递归深度限制,但无论设置多大的限制,都会提示限制过低。请问该如何解决这个问题?

原非递归代码

#Dot product not recursively
def dot(L, K):
    """ Calculates dot product of lists L and K
        Empty lists or lists of unequal length return 0
        L, K are floats or ints
    """

    x = len(L) - 1

    if len(L)!= len(K):
        return 0
    if len(L) == 0:
        return 0
    if len(K) == 0:
        return 0
    elif len(L) & len(K) == 1:
        return L[x]*K[x]
    elif len(L) & len(K) == 2:
        return L[x] * K[x] + L[x-1] * K[x-1]
    elif len(L) & len(K) == 3:
        return L[x] * K[x] + L[x-1] * K[x-1] + L[x-2] * K[x-2]
    elif len(L) & len(K) == 4:
        return L[x] * K[x] + L[x-1] * K[x-1] + L[x-2] * K[x-2] + L[x-3] * K[x-3]

#Tries (kind of, I deleted most of my code...)
#    elif len(L) == len(K):                          #Infinite Recursion Error
#       return L[x] * K[x] + (dot(L, K)-1)
#    elif len(L) == len(K):                          #Object of Type int has no len() Error
#       return L[x] * K[x] + dot(L[x-1], K[x-1])

错误原因分析

  • 第一个递归尝试的问题:调用dot(L, K)时传入的还是原列表,没有缩小问题规模,函数会无限调用自身,触发无限递归错误——调深度限制没用,因为根本没有能终止递归的条件。
  • 第二个递归尝试的问题:L[x-1]取的是列表中的单个数值(int/float),不是子列表,传给dot函数后,函数里执行len()就会抛出“int没有len()”的类型错误。

正确的递归实现

递归的核心是每次把问题拆分为「当前元素的乘积」加上「剩余子列表的点积」,同时设置明确的终止条件:

实现方式1(从后往前处理)

def dot_recursive(L, K):
    # 终止条件:长度不等或空列表返回0
    if len(L) != len(K) or len(L) == 0 or len(K) == 0:
        return 0
    # 只剩一个元素时直接返回乘积
    if len(L) == 1:
        return L[0] * K[0]
    # 递归调用:最后一个元素的乘积 + 前面子列表的点积
    return L[-1] * K[-1] + dot_recursive(L[:-1], K[:-1])

实现方式2(从前往后处理,更简洁)

def dot_recursive(L, K):
    if len(L) != len(K):
        return 0
    if not L:  # 空列表直接返回0
        return 0
    # 第一个元素的乘积 + 剩余子列表的点积
    return L[0] * K[0] + dot_recursive(L[1:], K[1:])

测试验证

比如调用dot_recursive([1,2,3], [4,5,6]),计算过程是1*4 + 2*5 + 3*6 = 4+10+18=32,运行后会正确返回结果,不会出现递归错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:35:24