问题遇到的现象和发生背景
用递归算法把十进制转换为二进制
问题相关代码,请勿粘贴截图
这是正确答案
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
我想要达到的结果
我就想知道我的思路能不能实现题目的要求,还有这个答案真没看明白