鱼C论坛

 找回密码
 立即注册
查看: 1123|回复: 5

用递归把十进制转二进制

[复制链接]
发表于 2019-3-30 22:37:32 | 显示全部楼层 |阅读模式

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

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

x
def dec2bin(n):
    result=''
    if n==0:
        return result
    else:
        result=dec2bin(n//2)     #这是论坛上的答案.
        return result+str(n%2)
print(dec2bin(15))
答案是二进制的1111   这是论坛鱼神的答案。

def dec2bin(n):
    result=''
    if n==0:
        return result
    else:
        dec2bin(n//2)     #这里少了一个result
        return result+str(n%2)
print(dec2bin(15))
答案是二进制的1.   
这是我根据鱼神的答案,自己在脑子里构思,相当于默写了一遍.   虽然知道自己的答案是错的。但是实在想不通为什么要在dec2bin(n//2)前面加一个result=.
请鱼友帮忙分析下。

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-3-30 22:55:31 | 显示全部楼层
本帖最后由 jackz007 于 2019-3-30 22:57 编辑

    递归到底的时候返回一个空串,然后逐级顺序添加 str(n % 2) 。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-30 23:12:27 | 显示全部楼层
jackz007 发表于 2019-3-30 22:55
递归到底的时候返回一个空串,然后逐级顺序添加 str(n % 2) 。

多谢. 这个能理解的。但是想不通为什么要在dec2bin(n//2)前面加一个result=.
大脑有点转不过来...
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-30 23:22:53 | 显示全部楼层
本帖最后由 jackz007 于 2019-3-30 23:29 编辑
a88789616 发表于 2019-3-30 23:12
多谢. 这个能理解的。但是想不通为什么要在dec2bin(n//2)前面加一个result=.
大脑有点转不过来...


      因为递归到底的时候,result 是空串,从这个时候起,result 开始有了确定的结果,那么 result + str(n % 2) 的结果也就确定了。

      如果你实在纠结于这个 result 变量,那也完全可以不要它,直接这么写效果是一样的:
  1.         result=dec2bin(n//2)
  2.         return result+str(n%2)
复制代码

    可以改成下面这样:
  1.         return dec2bin(n // 2) + str(n % 2)
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-30 23:32:52 | 显示全部楼层
jackz007 发表于 2019-3-30 23:22
因为递归到底的时候,result 是空串,从这个时候起,result 开始有了确定的结果,那么 result +  ...

答案不一样啊。老铁.     一个答案是二进制1111, 一个答案是二进制1.  差很远啊.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-30 23:38:32 | 显示全部楼层
a88789616 发表于 2019-3-30 23:32
答案不一样啊。老铁.     一个答案是二进制1111, 一个答案是二进制1.  差很远啊.

          想当然了吧,修改是完全等效的,结果不可能有丝毫不同!!!

          试过了以后再说话。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-14 23:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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