关于递归,定义二进制转换函数的问题
def shibianer(x):a = int(x)
s = 0
c = 1
e = 0
while c != 0:
c = int(a/2)
b = int(a%2)
a = c
s += 1
e = b*10**(s-1)+e
return e
c = shibianer(255)
print(c)
上边的是我写的用循环进行10进制转换成2进制
然后改成用递归来写的时候就蒙了,用的数组a,为什么else后面的 a返回不出来
def bian(x):
if x != 0:
a = []
if x % 2 == 0:
a.append(0)
else:
a.append(1)
bian(int(x / 2))
print(a)
else:
return a
如果改成用数来做也会出现同样的问题
是要用到全局变量吗? 因为你的a是在if中定义赋初值的,最后一次递归的时候x为0,直接进入else,但是此时a没有定义,直接return a,就报错了。
再者,你是打算直接在里面print还是打算return啊?若直接在函数里面print,那不必写最后两行;若打算return,那么程序要有问题,就时递归的结果没有利用起来,你最终得不到结果
def bian(x):
a=[]
if x != 0:
if x % 2 == 0:
a.append(0)
else:
a.append(1)
a=bian(int(x / 2))+a
#print(a)
return a
print(bian(4)) sunrise085 发表于 2020-10-29 16:42
因为你的a是在if中定义赋初值的,最后一次递归的时候x为0,直接进入else,但是此时a没有定义,直接return a ...
感谢大佬
页:
[1]