鱼C论坛

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

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

[复制链接]
发表于 2020-5-21 22:11:23 | 显示全部楼层 |阅读模式

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

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

x
def Dec2Bin(dec):
    result = '  '

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


print(Dec2Bin(62))

感觉是用到了递归,但是我不是很能理解 每一行的作用是什么。 代码运行的步骤,还有代码的原理。

好挫败啊, 十进制转二进制听起来这么简单的。。怎么我看代码都看不懂是。。 语法没问题,就是不懂代码运行的步骤,和思路是什么。
最佳答案
2020-5-21 23:47:49
本帖最后由 Twilight6 于 2020-5-21 23:49 编辑

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

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

print(Dec2Bin(10))


如果帮助到你了 就给个最佳呗~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-21 22:16:00 | 显示全部楼层
先把10进制的书str
再用下列代码
int(变量名,转换成几进制)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-21 22:21:21 | 显示全部楼层
本帖最后由 Stubborn 于 2020-5-21 22:57 编辑

运行步骤,你需要知道一点就是,这样的不存在异步,遇到函数就进去,得到结果才退出。

                   Desc(10) -> Desc(5) -> Desc(2) -> Desc(1) -> Desc(0)

到最后一个函数才出结果,出结果之后,这个结果给谁?是给调用者的,一层一层的返回结果。

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

使用道具 举报

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

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

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

print(Dec2Bin(10))


如果帮助到你了 就给个最佳呗~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-22 05:18:44 | 显示全部楼层
Twilight6 发表于 2020-5-21 15:47
这样可以理解不:

谢谢你, 前边递归能看懂了, 但是为什么第7行是 返回的result + str(dec%2) 呢?

还有第8行为什么是倒着开始返回呢: (0)->(1)->(2)->(5)->(10)呢

求指教。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

因为每次递归时候 result = ''
每次单独返回的result 实际上就一个余数 你要把每次返回的全部拼接起来,否则你返回还是空字符串,没有把前面递归的结果联系下一次递归的结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

# 然后开始返回值 Dec2Bin(0)->Dec2Bin(1)->Dec2Bin(2)->Dec2Bin(5)->Dec2Bin(10)

想问一下返回值的时候,为什么和递归的时候 顺序是相反的呢?
想知道小甲鱼最近在做啥?请访问 -> 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楼开始呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-22 17:01:07 | 显示全部楼层
Twilight6 发表于 2020-5-22 08:50
因为递归是一层一层进去的,也要一层一层返回来

打个比方 你从5楼 走到 1 楼 然后你再上楼梯 是 从 1 ...

感觉应该能理解, 那每次递归的值是预先存在什么地方了么?? 类似于栈,或者 内存的地方?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

不 依次返回了 拼接上result 后的值  看这里:
return result + str(dec % 2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-5-22 18:25:05 | 显示全部楼层
Twilight6 发表于 2020-5-22 09:06
不 依次返回了 拼接上result 后的值  看这里:

应该是明白了 吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

哈哈 递归 你可以换个有调试功能的编译器
把递归调试时候你就很好理解了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-21 04:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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