鱼C论坛

 找回密码
 立即注册
查看: 3054|回复: 7

这是一个把利用递归把二进制转换成十进制的代码,有一个问题想请教?

[复制链接]
发表于 2022-10-30 20:31:56 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 wjhzj 于 2022-10-31 16:23 编辑

这是一个把利用递归把十进制转换成二进制的代码,请问标黄的那句为什么改成while(n > 0),结果就不对了呀?
lst = []
def shitoer(n):
    if (n > 0):
        m = n % 2
        lst.append(m)
        n = n //2
        shitoer(n)
    return lst

num = int(input('请输入一个十进制正整数:'))
result = shitoer(num)
result.reverse()
string = ''
l = len(result)
for i in range(l):
    string = string + str(result[i])
print('转换为二进制的结果是:'+ '0b' + string)

用if语句的结果:
请输入一个十进制正整数:8
转换为二进制的结果是:0b1000

用while语句的结果:
请输入一个十进制正整数:8
转换为二进制的结果是:0b110110011011000
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-30 20:36:13 | 显示全部楼层
本帖最后由 tommyyu 于 2022-10-30 20:41 编辑

递归的基本格式:
def func(参数):
    if 边界条件成立:
        ...
        func(缩小问题范围)
    else:
        到达边界

就你这个代码来说,如果使用 while 就不用使用递归了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-30 21:08:30 | 显示全部楼层
本帖最后由 jackz007 于 2022-10-30 21:10 编辑

         为什么要把 if 改成 while,你的企图是什么,你知道这种修改意味着什么吗?
          这个函数明明是把十进制数变成二进制字符串,却被你说成是二进制转十进制,我还以为是真的呢,你的头脑非常糊涂,可以说是一塌糊涂!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-30 21:08:57 | 显示全部楼层
tommyyu 发表于 2022-10-30 20:36
递归的基本格式:
def func(参数):
    if 边界条件成立:

感谢您的回复,但是我还是不太理解为什么您说使用while就不用使用递归了呢,while语句和if语句在这里功能上有什么区别呀,如果您方便的话,期待得到您的解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-30 21:12:54 | 显示全部楼层
jackz007 发表于 2022-10-30 21:08
为什么要把 if 改成 while,你的企图是什么,你知道这种修改意味着什么吗?

一开始我用的就是while,然后一直报错,改成if以后就好了。没有什么企图,只是想满足当n大于零时才运行下面的代码,等于零的时候跳出。但是我不理解为什么while不行,所以发了这个帖子,不太清楚这种修改意味着什么,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-30 21:21:39 | 显示全部楼层
本帖最后由 jackz007 于 2022-10-30 21:55 编辑
wjhzj 发表于 2022-10-30 21:12
一开始我用的就是while,然后一直报错,改成if以后就好了。没有什么企图,只是想满足当n大于零时才运行下 ...


          if 是一次性执行,如果条件为真就执行,执行一次就拉倒;while 是循环,需要反复执行,一直到把 while 后面的条件搞黄为止,这就是区别。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-31 16:24:44 | 显示全部楼层
jackz007 发表于 2022-10-30 21:08
为什么要把 if 改成 while,你的企图是什么,你知道这种修改意味着什么吗?
          这个函数 ...

是我写帖子的时候不小心搞错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-31 16:25:21 | 显示全部楼层
jackz007 发表于 2022-10-30 21:21
if 是一次性执行,如果条件为真就执行,执行一次就拉倒;while 是循环,需要反复执行,一直 ...

感谢解答,已明白!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 21:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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