递归实现指定逻辑数学运算函数出错,求修正方案
递归函数逻辑修正问题
需求说明
实现一个递归函数,执行以下逻辑:
- 若
a=0或b=0,返回[a, b];否则执行步骤2 - 若
a≥2b,将a设为a-2b,重复执行整个逻辑;否则执行步骤3 - 若
b≥2a,将b设为b-2a,重复执行整个逻辑;否则返回[a, b]
预期效果示例
- 输入
(6, 19)返回[6, 7] - 输入
(2, 1)返回[0, 1] - 输入
(22, 5)返回[0, 1] - 输入
(8796203,7556)返回[1019,1442]
当前代码问题
你提供的代码仅执行一次减法操作就返回结果,没有通过递归重复执行逻辑,导致需要多次迭代的场景(如(22,5))无法得到正确结果,且不符合递归要求。
修正后的代码
def reduce_pair(a, b): # 终止条件:a或b为0 if a == 0 or b == 0: return [a, b] # a≥2b时,更新a后递归 if a >= 2 * b: return reduce_pair(a - 2 * b, b) # b≥2a时,更新b后递归 if b >= 2 * a: return reduce_pair(a, b - 2 * a) # 不满足以上条件,返回当前值 return [a, b]
修正说明
- 去掉了冗余的中途判断,每次更新
a或b后直接递归调用函数,让流程重新从第一步开始判断 - 严格遵循递归逻辑:每次调整值后,重新进入整个判断流程,直到触发终止条件(
a或b为0,或两者都不满足≥2倍对方的条件)
以(22,5)为例,递归流程如下:
22≥10→ 调用reduce_pair(12,5)12≥10→ 调用reduce_pair(2,5)5≥4→ 调用reduce_pair(2,1)2≥2→ 调用reduce_pair(0,1)- 触发终止条件,返回
[0,1],符合预期
内容的提问来源于stack exchange,提问作者babygroot
相关产品推荐
相关产品推荐

