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

递归实现十进制转二进制时列表未正常返回问题排查

递归实现十进制转二进制返回None的问题解决

你的问题核心是递归分支没有返回递归调用的结果:
当n>=1时,你调用了binary_rec(n//2, l),但没把这个递归调用的返回值传递回去。最底层的递归(n<1时)确实返回了排序后的二进制列表,但上层的递归调用因为缺少return语句,会默认返回None,最终主函数拿到的就是这个None。

修改后的代码

只需要在n>=1的分支里添加return,把递归结果传递出去:

def binary_rec(n, l=[]):
    if n>=1:
        r = n%2
        l.append(r)
        # 新增return,将递归调用的结果返回给上层
        return binary_rec(n//2, l)
    else:
        l_rev = sorted(l, reverse=True)
        print(l_rev)
        return l_rev

if __name__ == '__main__':
    import sys
    inp = sys.argv[1]
    x = binary_rec(int(inp), l=[])
    print(x)

额外提醒:避免默认参数的陷阱

你当前调用时手动传了l=[],所以没出问题,但Python函数的默认参数是在函数定义时创建的,如果多次调用binary_rec而不传l参数,会共享同一个列表,导致结果混乱。建议修改默认参数的写法:

def binary_rec(n, l=None):
    # 每次调用时初始化空列表,避免共享
    if l is None:
        l = []
    if n>=1:
        r = n%2
        l.append(r)
        return binary_rec(n//2, l)
    else:
        l_rev = sorted(l, reverse=True)
        print(l_rev)
        return l_rev

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:35:20