懵懵闯 发表于 2020-5-31 09:57:12

递归好难啊

1、十进制转化为2进制
def Dec2Bin(dec):
    result = ''   #不懂这个是什么用
   
    if dec:
      result = Dec2Bin(dec//2)   #这是取2,如果是8(10),2进制不是1×2*3,所以应该是1000,那除2,不就是4而已,就算再循环也是4//2=2,2//2=1
      return result + str(dec%2)       #上面求出了4,加个字符转义什么余数什么用,是只有这一步是在递归吗
    else:
      return result

print(Dec2Bin(8))

2、列表如下
result = []      #这个是起列表作用?还是只是递归后,加个[]而已
def get_digits(n):
      if n > 0:
                result.insert(0, n%10)      #为什么位置参数是0,那不是都是在前面插入么,明明求的是余数,余数不是都在后面吗
                get_digits(n//10)

get_digits(12345)
print(result)

Mike_python小 发表于 2020-5-31 10:08:17

育碧

Twilight6 发表于 2020-5-31 10:09:20

result = ''   #不懂这个是什么用这个是等于把变量初始化,后面递归得到结果依次拿去拼接上
得到最后的result,因为最后一次递归并不会进入if条件,而进入else 如果你没初始化就会报错
result = Dec2Bin(dec//2)   #这是取2,如果是8(10),2进制不是1×2*3
所以应该是1000,那除2,不就是4而已,就算再循环也是4//2=2,2//2=1我看不懂你问题里的 8(10)。。。但是就是把 dec 的值地板除2,然后进入递归
return result + str(dec%2)       #上面求出了4,加个字符转义什么余数什么用,是只有这一步是在递归吗上一步在递归了,不是这一步,这一步是每次递归的结果相互拼接起来



Twilight6 发表于 2020-5-31 10:13:35

result = []      #这个是起列表作用?还是只是递归后,加个[]而已同上题,变量赋值为空字符串、字典、列表等大部分都是为了初始化数值,为后面代码做准备条件,否则会报错NameError
result.insert(0, n%10)      #为什么位置参数是0,那不是都是在前面插入么,明明求的是余数,余数不是都在后面吗去了解下除二取余法算二进制:
例如:
把89化为二进制的数
89÷2=44 余1
44÷2=22 余0
22÷2=11 余0
11÷2=5 余1
5÷2=2 余1
2÷2=1 余0
1÷2=0 余1
然后把余数由下往上排序
1011001(2)
这样就把89化为二进制的数了
——转至百度百科

liaoyiqin 发表于 2020-5-31 10:28:41

sofa

heidern0612 发表于 2020-5-31 19:58:48

看这个吧,有详细解释:戳我前进
页: [1]
查看完整版本: 递归好难啊