鱼C论坛

 找回密码
 立即注册
查看: 1453|回复: 11

[已解决]十进制转换二进制 有没有大佬能帮我解释一下每一行啊, 代码思路?

[复制链接]
发表于 2020-5-21 23:47:49 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-5-21 23:49 编辑

这样可以理解不:
  1. def Dec2Bin(dec):
  2.     result = ''

  3.     if dec:
  4.         result = Dec2Bin(dec // 2)
  5.         # 这里用了递归    Dec2Bin(10)->Dec2Bin(5)->Dec2Bin(2)->Dec2Bin(1)->Dec2Bin(0)
  6.         return result + str(dec % 2)
  7.         # 然后开始返回值 Dec2Bin(0)->Dec2Bin(1)->Dec2Bin(2)->Dec2Bin(5)->Dec2Bin(10)
  8.         # 返回结果是          ''     +   '1'     +   '0'    +  '1'      +    '0'
  9.     else:
  10.         return result

  11. print(Dec2Bin(10))
复制代码



如果帮助到你了 就给个最佳呗~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-22 08:37:21 | 显示全部楼层
hwang.me 发表于 2020-5-22 05:18
谢谢你, 前边递归能看懂了, 但是为什么第7行是 返回的result + str(dec%2) 呢?

还有第8行为什么是 ...

因为每次递归时候 result = ''
每次单独返回的result 实际上就一个余数 你要把每次返回的全部拼接起来,否则你返回还是空字符串,没有把前面递归的结果联系下一次递归的结果
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-22 16:50:11 | 显示全部楼层
hwang.me 发表于 2020-5-22 16:24
#这里开始递归 Dec2Bin(10)->Dec2Bin(5)->Dec2Bin(2)->Dec2Bin(1)->Dec2Bin(0)

# 然后开始返回值 Dec2B ...

因为递归是一层一层进去的,也要一层一层返回来

打个比方 你从5楼 走到 1 楼 然后你再上楼梯 是 从 1楼到 5 楼 还是 直接从5楼开始呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-22 17:06:45 | 显示全部楼层
hwang.me 发表于 2020-5-22 17:01
感觉应该能理解, 那每次递归的值是预先存在什么地方了么?? 类似于栈,或者 内存的地方?

不 依次返回了 拼接上result 后的值  看这里:
  1. return result + str(dec % 2)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-5-22 18:26:13 | 显示全部楼层
hwang.me 发表于 2020-5-22 18:25
应该是明白了 吧

哈哈 递归 你可以换个有调试功能的编译器
把递归调试时候你就很好理解了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-1 23:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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