Miki_Sa_yaka 2022-07-11 14:44 采纳率: 77.8%
浏览 201
已结题

用递归算法把十进制转换为二进制

问题遇到的现象和发生背景

用递归算法把十进制转换为二进制

问题相关代码,请勿粘贴截图

这是正确答案
def Bin(n):
temp = ''
if n:
temp = Bin(n//2)
temp += str(n%2)
return temp
else:
return temp
num = int(input('请输入一个十进制数:'))
print(num,'-->',Bin(num))

运行结果及报错内容

不明白的点有几个:
1.是不是递归算法结果一定要用return返回
2.按它的思路走,一个数(比如89)进去后,进入if,那么进行第一步,调用本身的函数,然后又返回调用,此时它还是89,在往回调用不是死机了吗,怎么会往下跑呢
3.它从头到尾就是用了一个变量,我不明白,我觉得至少要两个变量,一个用来记录除以2后的余数,一个用记录用floor除法后的得到的结果(这个变量我觉得可以用本身的变量覆盖)

我的解答思路和尝试过的方法

这是我根据CSDN上某一位博主的递归思路自己写的,写到把他抽象成一个个逻辑相同的简单问题时,卡主了,因为我觉得要用两个变量(也就是写else表达式的那一步):

#用递归编写bin函数:
#终止时刻:除数是1
#简单条件:除数是1是返回值1
#重复逻辑:除数除以2,记录余数,添加到列表,取floor除法的结果再除2
def bin1(x):
#从结果倒推
#先创建一个列表,把余数都添加到列表里
list1 = []
if x == 1:
list1.append(1)
else:
list1.append()

print(list1)

bin1(89)

#89 1011001

我想要达到的结果

我就想知道我的思路能不能实现题目的要求,还有这个答案真没看明白

  • 写回答

2条回答 默认 最新

  • 请叫我问哥 Python领域新星创作者 2022-07-11 15:28
    关注

    1.是不是递归算法结果一定要用return返回
    不是,但是一定要有退出条件,使得不会无限递归下去。比如本例的正确答案中,当n为0的时候,不再递归。而要不要返回结果,通常是要看你希望通过运行程序得到什么结果。
    ===============
    2.按它的思路走,一个数(比如89)进去后,进入if,那么进行第一步,调用本身的函数,然后又返回调用,此时它还是89,在往回调用不是死机了吗,怎么会往下跑呢
    每次调用的时候,下一个n都是被2整除的结果,比如第一次n=89,调用递归的时候,n=n//89,就变成了44,一直到n=0的时候停止递归。
    ===============
    3.它从头到尾就是用了一个变量,我不明白,我觉得至少要两个变量,一个用来记录除以2后的余数,一个用记录用floor除法后的得到的结果(这个变量我觉得可以用本身的变量覆盖)
    正确答案里已经使用了这两个值,只是省略的变量。用floor除法后的得到的结果已经传入递归,除以2后的余数则附加在字符串变量temp的后面。
    ===============
    4.我就想知道我的思路能不能实现题目的要求
    当然可以。只不过你写的这个程序还要再完善一下。如果递归程序不返回值,则需要有一个全局变量记录计算二进制的结果,所以列表应该拿出来作为全局变量。下面写法供参考:

    def bin1(x):
        if x == 1:
            list1.append(1)
        else:
            bin1(x//2)
            list1.append(x%2)
    
    num = int(input('请输入一个十进制数:'))
    list1 = []
    bin1(num)
    print(num,'-->',list1)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月19日
  • 已采纳回答 7月11日
  • 创建了问题 7月11日

悬赏问题

  • ¥15 高价求抖音抓包技术,抖音抓包无网络问题
  • ¥15 【matlab】已知功率谱密度反求时域信号
  • ¥15 mindspore项目_模型适配
  • ¥15 openstack使用cinder后,实例运行时分配的总空间不能大于ceph的总空间
  • ¥15 [pcl::PLYWriter::writeASCII] Error during opening (?鶂?)!
  • ¥15 得到XY两轴的数据如何绘制成圆,输入整形器
  • ¥29 PHP读取PDF文件添加多个数字签名
  • ¥25 联邦学习vgg修改最后一个全连接层报错(默认是1000个输出,我的改为11就报错,改为200就没问题)
  • ¥15 maple画图问题,为什么会是这样
  • ¥15 RC522开发arduino作品刷卡失效