cat971216 发表于 2020-10-16 16:49:51

P25作业十进制转二进制(用递归),我的代码哪有问题?

def bin(x):
    list = []   

    if x == 0:
      list.append(0)
      return list
    else:
      bin(x//2)
      list.append(x % 2)
      return list


x = int(input("请输入需要转换的数字:"))
print("转换二进制以后为:", bin(x))


这个题本来是让以字符串形式呈现,我一时没想到怎么用字符串,就用了列表。但每次跑出来的效果都是:

请输入需要转换的数字:15
转换二进制以后为:
>>>
============= RESTART: 十进制转换二进制.py =============
请输入需要转换的数字:10
转换二进制以后为:


就并不能实现递归。
但我觉得我和小甲鱼给的答案,除了字符串/列表以外没什么差别啊:
(以下是正确答案 能正常跑)

def Dec2Bin(dec):
    result = ''
   
    if dec:
      result = Dec2Bin(dec//2)
      return result + str(dec%2)
    else:
      return result

print(Dec2Bin(62))


求问一下到底哪有问题?

昨非 发表于 2020-10-16 17:06:30

本帖最后由 昨非 于 2020-10-16 17:11 编辑

list = []
def bin(x):
    if x != 0:
      bin(x//2)
      list.append(x % 2)
      return list
x = int(input("请输入需要转换的数字:"))
print("转换二进制以后为:", bin(x))

这样就好了,只不过显示出来的是个列表,没有字符串好看
你这个的原因可能是每次调用bin()的时候列表被重新置为空列表了,写在函数外面,取余一位添加一位就好了

jtxs0000 发表于 2020-10-16 17:18:10

问题你已经自己说出来了,你用的是列表,打印出来的肯定就是列表啦

def bin(x):
    # list = []    # 这里改成空字符串
    list = ''


    if x == 0:
      # list.append(0)
      list += str(0)      # 这里添加进去
      return list
    else:
      bin(x//2)
      # list.append(x % 2)
      list += str(x%2)
      return list


x = int(input("请输入需要转换的数字:"))
print("转换二进制以后为:", bin(x))


sunrise085 发表于 2020-10-16 17:18:45

因为你没有把递归的返回值利用起来,所以最终返回的其实一直都是输入的数字对2求余的结果,也就是只有0或1
你对比一下你的程序第8、9行和小甲鱼程序的第5、6行
页: [1]
查看完整版本: P25作业十进制转二进制(用递归),我的代码哪有问题?