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

如何用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)

递归逻辑说明

  1. 辅助函数参数:

    • current_num:已经拼接好的数字字符串
    • pos:当前要构建的是第几位(从0开始,对应数字的左到右顺序)
    • sum_diff:用sum1 - sum2的差值代替同时传递两个和,简化参数传递
  2. 终止条件:
    当pos等于n时,说明已经构建出完整的n位数字,此时如果sum_diff为0,代表sum1等于sum2,打印该数字。

  3. 递归过程:

    • 第一位(pos=0)从1开始遍历(避免生成以0开头的数,保证是n位正整数),其余位从0到9遍历所有可能的数字
    • 根据当前位的奇偶索引,更新sum_diff:偶数索引位的数字加入sum1,差值增加该数字;奇数索引位的数字加入sum2,差值减少该数字
    • 递归调用辅助函数,传递更新后的数字串、下一位位置、新的差值

测试验证

比如调用n_sums_recursive(2),会输出11、22、33...99,和你的循环版本输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:05:34