列表在递归结束时未返回



我尝试使用递归将十进制数转换为二进制数,并在最后应该返回持有二进制数的数字的列表。但它不是返回那个列表,而是返回None。但是当我尝试在递归函数中打印列表时,它正确地打印了列表。有人能指出我哪里做错了吗?

def binary_rec(n, l=[]):
if n>=1:
r = n%2
l.append(r)
binary_rec(n//2, l)
else:
print(sorted(l,reverse=True))
l_rev = sorted(l,reverse=True)
#ll = l.copy()
#print('I am ll')
#print(ll)
#return ll
return l_rev
if __name__ == '__main__':
import sys
inp = sys.argv[1]
x = binary_rec(int(inp),l=[])
print(x)

每次递归调用该函数时都必须返回该列表:

def binary_rec(n, l=[]):
if n>=1:
r = n%2
l.append(r)
return binary_rec(n//2, l)
else:
print(sorted(l,reverse=True))
l_rev = sorted(l,reverse=True)
#ll = l.copy()
#print('I am ll')
#print(ll)
#return ll
return l_rev
if __name__ == '__main__':
import sys
inp = sys.argv[1]
x = binary_rec(int(inp),l=[])
print(x)

当你在函数末尾返回列表时,该值在你最后一次调用函数时被接收。由于没有在返回时处理该值,因此它在函数第一次返回时就消失了,因为之前的调用是在函数内部进行的。通过添加返回,你将列表传递给之前的调用,以此类推。

您还可以看到,如果将第一个值0传递给函数,它将返回一个空列表,而不是None。因此,您可以推断出问题出在函数的递归调用上。

如果不返回递归调用的结果,则更改为:

return binary_rec(n//2, l)

最新更新