递归实现十进制转二进制时列表未正常返回问题排查
递归实现十进制转二进制返回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
相关产品推荐
相关产品推荐

