鱼C论坛

 找回密码
 立即注册
查看: 3196|回复: 10

用递归写十转二进制,有不解

[复制链接]
发表于 2014-7-12 00:05:00 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 欣欣celin 于 2014-7-12 21:07 编辑

def Dec2Bin(dec):
    result = ''

    if dec:
        result = Dec2Bin(dec//2)  #事实上这一步已求出二进制结果
        return result + str(dec%2) #为何还要加上这一句呢??{:7_154:}
    else:
        return result

print(Dec2Bin(62))

最佳答案

查看完整内容

然后我至今也没彻底搞懂到底是怎么个回事。能帮的帮你了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-12 00:05:01 | 显示全部楼层
本帖最后由 swl19880916 于 2014-7-12 08:55 编辑
def Dec2Bin(dec):
    result = ''

    if dec:
        result = Dec2Bin(dec//2)  #我的理解是,因为这里是返回最后的dec/2的值,是为了终止if语句的。而不是返回的余数。result = Dec2Bin(dec//2)是难点。
        return result + str(dec%2)#这个才是返回的str余数。
    else:
        return result

print(Dec2Bin(61))

然后我至今也没彻底搞懂到底是怎么个回事。能帮的帮你了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-12 10:42:08 | 显示全部楼层
求一个数的2进制数就是把一个数一直短除以2 ,最后得到的0,1,倒着排列就是它所对应的二进制数,//是地板除result = Dec2Bin(dec//2) 这一步起到的是最后一步1//2=0的时候让他退出if,把result返回,因为是倒着排列,这样二进制的第一个数就出来了,然后前面的几步分别在第一个二进制数后面加他们的余数(短除得到的那个数)return result + str(dec%2),简单来说 100010这个二进制数第一个1是 return result
这个返回的,剩下的都是return result + str(dec%2) 返回的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-12 10:50:01 | 显示全部楼层
def Dec2Bin(dec):
    result = ''

    if dec:
        result = Dec2Bin(dec//2)  #程序运行到这,会一直递归,最后当函数Dec2Bin传入的参数为0时,会返回result=‘’,之后会依次返回上一次的递归调用,执行return result + str(dec%2),那么最后return的就是dec的二进制表示。
        return result + str(dec%2)
    else:
        return result

print(Dec2Bin(62))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-12 14:29:07 | 显示全部楼层
加上才能把所有二进制位链接在一起嘛,其实你可以代一个数进去,一步步跟着算一次就理解咯。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-7-12 19:25:19 | 显示全部楼层
小甲鱼 发表于 2014-7-12 14:29
加上才能把所有二进制位链接在一起嘛,其实你可以代一个数进去,一步步跟着算一次就理解咯。

鱼哥,python怎样单步调试吖{:7_154:}

点评

python的单步调试功能 1:在需要下断点的地方加入断点: import pdb pdb.set_tarce() 2:pdb常用命令介绍 查看源代码:l(list) 监视变量:p(print) 单步执行:n(next) 进入函数:s(step) 加入  详情 回复 发表于 2014-7-12 20:54
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-12 20:54:41 | 显示全部楼层
欣欣celin 发表于 2014-7-12 19:25
鱼哥,python怎样单步调试吖


python的单步调试功能

1. 在需要下断点的地方加入断点:

import pdb

pdb.set_tarce()

2. pdb常用命令介绍

查看源代码:l(list)

监视变量:p(print)

单步执行:n(next)

进入函数:s(step)

加入断点:b(break)

运行直到断点终止:c(continue)

运行直到函数返回前:r(return)

终止并退出:e(exit)

注意:pdb和GDB在很多地方有相似之处。

不过这个程序用“人脑单步调试”即可。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-7-12 21:06:21 | 显示全部楼层
小甲鱼 发表于 2014-7-12 20:54
python的单步调试功能

1. 在需要下断点的地方加入断点:


                               
登录/注册后可看大图

谢谢鱼哥,请你食荔枝咯{:7_182:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-7-12 21:25:39 | 显示全部楼层
小甲鱼 发表于 2014-7-12 20:54
python的单步调试功能

1. 在需要下断点的地方加入断点:

鱼哥,是这样用吗?

如:
def sum(x):
    result = 0
    for each in x:
        if (isinstance(each,int)):
            result += each
            import pdb;pdb.set_trace()

~~~~~:

> e:\python\sum.py(44)sum()
-> for each in x:
(Pdb) h

Documented commands (type help <topic>):
========================================
EOF    cl         disable  interact  next     return  u         

where
a      clear      display  j         p        retval  unalias  
alias  commands   down     jump      pp       run     undisplay
args   condition  enable   l         print    rv      unt      
b      cont       exit     list      q        s       until   
break  continue   h        ll        quit     source  up      
bt     d          help     longlist  r        step    w        
c      debug      ignore   n         restart  tbreak  whatis   

Miscellaneous help topics:
==========================
exec  pdb

(Pdb)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-3-16 18:05:44 | 显示全部楼层
明显return不能返回最终结果,二进制是由余数倒序排列而成的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-14 16:05:22 | 显示全部楼层
新人来看讲解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-27 23:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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