741712547 发表于 2017-4-30 10:08:00

python用递归写BIN()这个BIF报错,请问下是什么原因。

def bindg(temp):
    jieguo = []
    """通过用递归来实现求一个十进制数转二进制数"""
    shang = temp // 2
    yu = temp % 2
    print(yu)
    if shang == 0:
      return
    else:
      return jieguo.extend(bindg(shang))

print(bindg(5210))

741712547 发表于 2017-4-30 20:35:35

自己检查了下,没找出为什么,我重新设置一个全局变量的列表,来完成的这个问题。

莺与鸢 发表于 2017-5-5 15:52:17

你这写的。。。{:10_269:} 最起码可以明显看出错了两处,第一:你每次迭代的时候把Line2: jieguo给清空了,后面做的再多都是无用功;第二,else:里面的return,list.extend加入的只能是列表,你却把【bindg(shang)】加进去了,这是个列表吗?这是个函数!
好人做到底,修改好了的代码给你,你拿去研究下把:
jieguo = []
def bindg(temp):
    """通过用递归来实现求一个十进制数转二进制数"""
    shang = temp // 2
    yu = temp % 2
    if shang == 0 and yu==1:#如果能整出,则输出1
      jieguo.append(1)
      #return jieguo   此时输出的jieguo 是个反着的二进制,下面做的就是将其“正过来”
      i=0
      while i+1<len(jieguo):
            jieguo.append(jieguo)
            jieguo.pop(0)
            i+=1
      return jieguo
    elif shang==0 and yu==0:#以0求二进制时:
      return
    else:
      jieguo.append(yu)
      return bindg(shang)

print(bindg(5210))

741712547 发表于 2017-5-5 21:04:11

莺与鸢 发表于 2017-5-5 15:52
你这写的。。。 最起码可以明显看出错了两处,第一:你每次迭代的时候把Line2: jieguo给清空了 ...

我后面的实现代码和你这个差不多,就是设置了一个全局变量,有点不甘心啊。

741712547 发表于 2017-5-5 21:04:50

741712547 发表于 2017-5-5 21:04
我后面的实现代码和你这个差不多,就是设置了一个全局变量,有点不甘心啊。

太谢谢你了,这么多人,只有你一个人回复并且把相应的错误给找出来了。
页: [1]
查看完整版本: python用递归写BIN()这个BIF报错,请问下是什么原因。