十进制数转二进制代码咨询:递归转换函数运行逻辑求讲解
已完成的代码片段
你目前写的输入校验部分代码翻译成中文后如下:
import math num_to_convert = int(input("请输入1到100之间的任意整数:")) while num_to_convert < 1 or num_to_convert > 100: num_to_convert = int(input("抱歉,输入不是1到100之间的整数,请重试:")) else: # 后续可替换为转二进制的逻辑 print("I'm lost!")
补充说明:这里的
else是while循环的附属分支,只要循环没有被break强制打断,正常结束时就会执行该分支内的代码,后续你要实现转二进制功能,把else里的打印替换成调用转二进制函数即可。
十进制转二进制代码原理解析
你找到的递归版转二进制代码添加中文注释后如下:
def decimalToBinary(n): if n > 1: # 做整数除法,丢弃余数 decimalToBinary(n//2) # 打印当前数除以2的余数,输出不换行 print(n%2, end=' ')
实现原理
该代码完全对应十进制转二进制的标准计算规则:除2取余,逆序排列。递归的调用特性(先执行深层调用,深层结束后才返回上层执行后续代码)天然满足了「逆序排列余数」的要求,不需要额外做序列反转操作。
执行流程示例
我们以调用decimalToBinary(6)为例,完整执行步骤如下:
- 第一层调用n=6,满足n>1的条件,先调用
decimalToBinary(6//2=3),当前层的打印操作暂时挂起 - 第二层调用n=3,满足n>1的条件,先调用
decimalToBinary(3//2=1),当前层的打印操作暂时挂起 - 第三层调用n=1,不满足n>1的条件,跳过递归调用,直接执行打印:
1%2=1,输出1,第三层执行结束返回第二层 - 第二层继续执行挂起的打印操作:
3%2=1,输出1,第二层执行结束返回第一层 - 第一层继续执行挂起的打印操作:
6%2=0,输出0
最终输出结果为1 1 0 ,正好对应十进制6的二进制值110。
内容的提问来源于stack exchange,提问作者Drewcifer25
相关产品推荐
相关产品推荐

