十进制转换二进制 有没有大佬能帮我解释一下每一行啊, 代码思路?
def Dec2Bin(dec):result = ''
if dec:
result = Dec2Bin(dec // 2)
return result + str(dec % 2)
else:
return result
print(Dec2Bin(62))
感觉是用到了递归,但是我不是很能理解 每一行的作用是什么。 代码运行的步骤,还有代码的原理。
好挫败啊, 十进制转二进制听起来这么简单的。。怎么我看代码都看不懂是。。 语法没问题,就是不懂代码运行的步骤,和思路是什么。{:10_269:} 先把10进制的书str
再用下列代码
int(变量名,转换成几进制) 本帖最后由 Stubborn 于 2020-5-21 22:57 编辑
运行步骤,你需要知道一点就是,这样的不存在异步,遇到函数就进去,得到结果才退出。
Desc(10) -> Desc(5) -> Desc(2) -> Desc(1) -> Desc(0)
到最后一个函数才出结果,出结果之后,这个结果给谁?是给调用者的,一层一层的返回结果。
本帖最后由 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))
如果帮助到你了 就给个最佳呗~{:10_288:} Twilight6 发表于 2020-5-21 15:47
这样可以理解不:
谢谢你, 前边递归能看懂了, 但是为什么第7行是 返回的result + str(dec%2) 呢?
还有第8行为什么是倒着开始返回呢: (0)->(1)->(2)->(5)->(10)呢
求指教。。{:10_266:} hwang.me 发表于 2020-5-22 05:18
谢谢你, 前边递归能看懂了, 但是为什么第7行是 返回的result + str(dec%2) 呢?
还有第8行为什么是 ...
因为每次递归时候 result = ''
每次单独返回的result 实际上就一个余数 你要把每次返回的全部拼接起来,否则你返回还是空字符串,没有把前面递归的结果联系下一次递归的结果 #这里开始递归 Dec2Bin(10)->Dec2Bin(5)->Dec2Bin(2)->Dec2Bin(1)->Dec2Bin(0)
# 然后开始返回值 Dec2Bin(0)->Dec2Bin(1)->Dec2Bin(2)->Dec2Bin(5)->Dec2Bin(10)
想问一下返回值的时候,为什么和递归的时候 顺序是相反的呢? hwang.me 发表于 2020-5-22 16:24
#这里开始递归 Dec2Bin(10)->Dec2Bin(5)->Dec2Bin(2)->Dec2Bin(1)->Dec2Bin(0)
# 然后开始返回值 Dec2B ...
因为递归是一层一层进去的,也要一层一层返回来
打个比方 你从5楼 走到 1 楼 然后你再上楼梯 是 从 1楼到 5 楼 还是 直接从5楼开始呢 Twilight6 发表于 2020-5-22 08:50
因为递归是一层一层进去的,也要一层一层返回来
打个比方 你从5楼 走到 1 楼 然后你再上楼梯 是 从 1 ...
感觉应该能理解, 那每次递归的值是预先存在什么地方了么?? 类似于栈,或者 内存的地方? hwang.me 发表于 2020-5-22 17:01
感觉应该能理解, 那每次递归的值是预先存在什么地方了么?? 类似于栈,或者 内存的地方?
不 依次返回了 拼接上result 后的值看这里:
return result + str(dec % 2) Twilight6 发表于 2020-5-22 09:06
不 依次返回了 拼接上result 后的值看这里:
应该是明白了 吧 {:10_266:} hwang.me 发表于 2020-5-22 18:25
应该是明白了 吧
哈哈 递归 你可以换个有调试功能的编译器
把递归调试时候你就很好理解了
页:
[1]