如何用Python实现递归版的奇偶位和相等的n位数输出函数?
递归实现n位奇偶位数字和相等的数查找函数
你的循环代码功能是找出所有n位正整数中,偶数索引位(从0开始计数)数字之和等于奇数索引位数字之和的数并打印。下面是对应的递归实现版本,以及逻辑说明:
递归实现代码
def n_sums_recursive(n: int): def helper(current_num: str, pos: int, sum_diff: int): # 递归终止:已构建完n位数字,检查和是否相等 if pos == n: if sum_diff == 0: print(current_num) return # 第一位不能为0,保证是n位正整数 start_digit = 1 if pos == 0 else 0 for digit in range(start_digit, 10): # 根据当前位的位置更新sum1与sum2的差值 # 偶数位属于sum1,差值 += digit;奇数位属于sum2,差值 -= digit new_diff = sum_diff + digit if pos % 2 == 0 else sum_diff - digit # 递归构建下一位 helper(current_num + str(digit), pos + 1, new_diff) # 初始调用:空字符串、第0位、差值为0 helper("", 0, 0)
递归逻辑说明
辅助函数参数:
current_num:已经拼接好的数字字符串pos:当前要构建的是第几位(从0开始,对应数字的左到右顺序)sum_diff:用sum1 - sum2的差值代替同时传递两个和,简化参数传递
终止条件:
当pos等于n时,说明已经构建出完整的n位数字,此时如果sum_diff为0,代表sum1等于sum2,打印该数字。递归过程:
- 第一位(pos=0)从1开始遍历(避免生成以0开头的数,保证是n位正整数),其余位从0到9遍历所有可能的数字
- 根据当前位的奇偶索引,更新
sum_diff:偶数索引位的数字加入sum1,差值增加该数字;奇数索引位的数字加入sum2,差值减少该数字 - 递归调用辅助函数,传递更新后的数字串、下一位位置、新的差值
测试验证
比如调用n_sums_recursive(2),会输出11、22、33...99,和你的循环版本输出一致。
内容的提问来源于stack exchange,提问作者mkownak
相关产品推荐
相关产品推荐

