鱼C论坛

 找回密码
 立即注册
查看: 1956|回复: 3

[已解决]递归:十进制转二进制

[复制链接]
发表于 2021-7-16 11:40:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def bins(x):
      list1 = []
      if x:
            n = x % 2
            list1.append(n)
            return bins(x//2)
      else:
            list1.append(1)
            return reversed(list1)

m = input('请输入数字:')
temp = int(m)
print(*bins(temp))

我这个运行结果只有1
最佳答案
2021-7-16 11:54:28


list1 在函数内属于局部变量,在递归过程会重新赋值,导致没错的 list1 都是不同的列表

所以我们需要在递归过程中带上 list1 才能合并到递归中的 list1 结果

参考代码:
def bins(x):
      list1 = []
      if x:
            n = x % 2
            list1.append(n)
            return bins(x//2)+list1
      else:
            return list1

m = input('请输入数字:')
temp = int(m)
print(*bins(temp))

顺便简化下你的代码:
def bins(x):
    if x:
        return bins(x//2)+[x%2]
    return []

m = input('请输入数字:')
temp = int(m)
print(*bins(temp))

另外你需要注意,你代码中 else 返回的 reversed 函数,返回的是一个方向迭代器,不是列表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-16 11:54:28 | 显示全部楼层    本楼为最佳答案   


list1 在函数内属于局部变量,在递归过程会重新赋值,导致没错的 list1 都是不同的列表

所以我们需要在递归过程中带上 list1 才能合并到递归中的 list1 结果

参考代码:
def bins(x):
      list1 = []
      if x:
            n = x % 2
            list1.append(n)
            return bins(x//2)+list1
      else:
            return list1

m = input('请输入数字:')
temp = int(m)
print(*bins(temp))

顺便简化下你的代码:
def bins(x):
    if x:
        return bins(x//2)+[x%2]
    return []

m = input('请输入数字:')
temp = int(m)
print(*bins(temp))

另外你需要注意,你代码中 else 返回的 reversed 函数,返回的是一个方向迭代器,不是列表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-7-16 12:34:09 | 显示全部楼层
Twilight6 发表于 2021-7-16 11:54
list1 在函数内属于局部变量,在递归过程会重新赋值,导致没错的 list1 都是不同的列表

所以我们需 ...

十分感谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-16 12:36:26 | 显示全部楼层
Twilight6 发表于 2021-7-16 11:54
list1 在函数内属于局部变量,在递归过程会重新赋值,导致没错的 list1 都是不同的列表

所以我们需 ...

你说的else 后返回的reversed 函数的意思是不是,reversed被当作函数返回,其中的list1被当作了变量.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 01:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表