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

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

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

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

这是正确答案
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

我想要达到的结果

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

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)

不返回怎么能得到计算结果,第二次进入并不是89而是89//2也就是44.直到0