elecfan 发表于 2021-4-25 01:03:10

python课后习题疑问

题目:使用递归编写一个十进制转换为二进制的函数:

首先我按照我的思路写了这样一个函数,输出的结果是“0101”,与我需要的输出结果“1010”是反的,我没想到有什么方法能够实现倒序打印,用了方法二;

方法一:
def bin2(dec):

    if dec:

      print(dec%2,end='')
      
      return   bin2(dec//2)

方法二:
#用列表方式实现倒序打印,但是这个方法有个弊端是,得在函数外部声明一个列表变量,如果在函数内部申明这个变量的话得不到想要的结果,想请教下各位大神,除了参考答案里的方法,还有没有更好的办法解决这个问题?
a=[]
def bin2(dec):

    if dec:

      a.append(dec%2)
      
      return   bin2(dec//2)
    i = len(a)
    while i:
      print(a.pop(),end='')
      i -= 1

kogawananari 发表于 2021-4-25 01:15:32

def bin3(i):
    a=[]
    def bin2(dec):
      if dec:
            a.append(dec%2)
            return bin2(dec//2)
      i = len(a)
      while i:
            print(a.pop(),end='')
            i -= 1
    return bin2(i)

bin3(255)



外面再套一层就行了

elecfan 发表于 2021-4-25 09:12:20

kogawananari 发表于 2021-4-25 01:15
外面再套一层就行了

这确实也是一个解决办法,谢谢!

paohhee 发表于 2021-4-25 11:22:31

def bin3(n):
    string = ""
    result = ""

    while n:
      y = n % 2
      string += str(y)
      n = n // 2

    for i in range(len(string)):
      result += string

    return result

这样的呢

elecfan 发表于 2021-4-25 14:05:35

paohhee 发表于 2021-4-25 11:22
这样的呢

谢谢!您这样没有用到递归吧?

paohhee 发表于 2021-4-26 09:15:16

elecfan 发表于 2021-4-25 14:05
谢谢!您这样没有用到递归吧?

没有审题,抱歉{:10_266:}
页: [1]
查看完整版本: python课后习题疑问