递归:十进制转二进制
def bins(x):list1 = []
if x:
n = x % 2
list1.append(n)
return bins(x//2)
else:
list1.append(1)
return reversed(list1)
m = input('请输入数字:')
temp = int(m)
print(*bins(temp))
我这个运行结果只有1
list1 在函数内属于局部变量,在递归过程会重新赋值,导致没错的 list1 都是不同的列表
所以我们需要在递归过程中带上 list1 才能合并到递归中的 list1 结果
参考代码:
def bins(x):
list1 = []
if x:
n = x % 2
list1.append(n)
return bins(x//2)+list1
else:
return list1
m = input('请输入数字:')
temp = int(m)
print(*bins(temp))
顺便简化下你的代码:
def bins(x):
if x:
return bins(x//2)+
return []
m = input('请输入数字:')
temp = int(m)
print(*bins(temp))
另外你需要注意,你代码中 else 返回的 reversed 函数,返回的是一个方向迭代器,不是列表
Twilight6 发表于 2021-7-16 11:54
list1 在函数内属于局部变量,在递归过程会重新赋值,导致没错的 list1 都是不同的列表
所以我们需 ...
十分感谢大佬 Twilight6 发表于 2021-7-16 11:54
list1 在函数内属于局部变量,在递归过程会重新赋值,导致没错的 list1 都是不同的列表
所以我们需 ...
你说的else 后返回的reversed 函数的意思是不是,reversed被当作函数返回,其中的list1被当作了变量.
页:
[1]