如何用Python递归计算两个列表的点积?现有不完整代码求完善
递归计算列表点积的实现方案
首先你现有代码中的第二个条件判断存在逻辑错误:elif len(L) or len(K) == 0的实际判定逻辑是「只要L的长度不为0,或者K的长度为0」就返回0,完全不符合「任意列表为空就返回0」的要求,需要先修正这个判断。
补全后的完整代码如下:
def dot(L, K): # 两个列表长度不一致直接返回0 if len(L) != len(K): return 0.0 # 任意列表为空返回0 elif len(L) == 0 or len(K) == 0: return 0.0 else: # 递归逻辑:当前首元素相乘 + 剩余子列表的点积结果 return L[0] * K[0] + dot(L[1:], K[1:])
逻辑说明
- 所有返回值统一使用浮点数类型,最终输出自然符合要求的浮点数格式
- 递归的终止条件为两个列表都被切分为空列表,此时返回0.0终止累加
- 每次递归调用都会将两个列表的第一个元素相乘,再将剩余的子列表传入下一轮递归,累加后得到完整的点积结果
测试验证
调用dot([5, 3], [6, 4])得到的输出为42.0,和给出的示例要求完全一致。其他边界场景测试结果如下:
dot([], [])返回0.0dot([1, 2], [3])返回0.0dot([2], [3])返回6.0
内容的提问来源于stack exchange,提问作者user17051255
相关产品推荐
相关产品推荐

