hwang.me 发表于 2020-5-21 22:11:23

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

def Dec2Bin(dec):
    result = ''

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


print(Dec2Bin(62))

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

好挫败啊, 十进制转二进制听起来这么简单的。。怎么我看代码都看不懂是。。 语法没问题,就是不懂代码运行的步骤,和思路是什么。{:10_269:}

xiaosi4081 发表于 2020-5-21 22:16:00

先把10进制的书str
再用下列代码
int(变量名,转换成几进制)

Stubborn 发表于 2020-5-21 22:21:21

本帖最后由 Stubborn 于 2020-5-21 22:57 编辑

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

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

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

Twilight6 发表于 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))

如果帮助到你了 就给个最佳呗~{:10_288:}

hwang.me 发表于 2020-5-22 05:18:44

Twilight6 发表于 2020-5-21 15:47
这样可以理解不:




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

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

求指教。。{:10_266:}

Twilight6 发表于 2020-5-22 08:37:21

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

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

因为每次递归时候 result = ''
每次单独返回的result 实际上就一个余数 你要把每次返回的全部拼接起来,否则你返回还是空字符串,没有把前面递归的结果联系下一次递归的结果

hwang.me 发表于 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)

想问一下返回值的时候,为什么和递归的时候 顺序是相反的呢?

Twilight6 发表于 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楼开始呢

hwang.me 发表于 2020-5-22 17:01:07

Twilight6 发表于 2020-5-22 08:50
因为递归是一层一层进去的,也要一层一层返回来

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

感觉应该能理解, 那每次递归的值是预先存在什么地方了么?? 类似于栈,或者 内存的地方?

Twilight6 发表于 2020-5-22 17:06:45

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

不 依次返回了 拼接上result 后的值看这里:
return result + str(dec % 2)

hwang.me 发表于 2020-5-22 18:25:05

Twilight6 发表于 2020-5-22 09:06
不 依次返回了 拼接上result 后的值看这里:

应该是明白了 吧 {:10_266:}

Twilight6 发表于 2020-5-22 18:26:13

hwang.me 发表于 2020-5-22 18:25
应该是明白了 吧

哈哈 递归 你可以换个有调试功能的编译器
把递归调试时候你就很好理解了
页: [1]
查看完整版本: 十进制转换二进制 有没有大佬能帮我解释一下每一行啊, 代码思路?