1Z啊 发表于 2020-10-29 16:30:06

关于递归,定义二进制转换函数的问题

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

如果改成用数来做也会出现同样的问题
是要用到全局变量吗?

sunrise085 发表于 2020-10-29 16:42:48

因为你的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))

1Z啊 发表于 2020-11-3 22:49:53

sunrise085 发表于 2020-10-29 16:42
因为你的a是在if中定义赋初值的,最后一次递归的时候x为0,直接进入else,但是此时a没有定义,直接return a ...

感谢大佬
页: [1]
查看完整版本: 关于递归,定义二进制转换函数的问题