woshiamaola 发表于 2021-4-29 14:22:10

旧版课后习题 P23 递归

不能理解此处 if的使用
当dec =2和3的时候
可以按照流程一步一步走下来
dec = 4
我就蒙了
if dec:
      result = Dec2Bin(dec // 2)
      return result + str(dec % 2)

昨非 发表于 2021-4-29 15:02:58

一步步来呗,
要不然把你思路写出来我们帮你分析分析
就三步啊也不至于

woshiamaola 发表于 2021-4-29 15:09:50

昨非 发表于 2021-4-29 15:02
一步步来呗,
要不然把你思路写出来我们帮你分析分析
就三步啊也不至于

dec = 4
result = Dec2Bin(2)
return 0

dec = 2
result = Dec2Bin(1)
return 0
最后是 00

昨非 发表于 2021-4-29 15:23:41

少一次循环啊

Peteryo01223 发表于 2021-4-29 16:42:10

本帖最后由 Peteryo01223 于 2021-4-29 16:44 编辑

我猜,你是对十进制转为二进制,基本原理不明确。十进制整数转换为二进制整数,采用"除2取余,逆序排列"法。这个“逆”很重要。例如:4,第一次除2,余数为0,写在最后一位。第二次除2,余数还为0,写在右数第二位。第三次除2,余1,写在右数第三位。因此,结果为:100。

对于4来说,这三次除法后,除数为0了,不符合 if 的要求了,因而自动跳出循环。

woshiamaola 发表于 2021-4-29 17:01:35

Peteryo01223 发表于 2021-4-29 16:42
我猜,你是对十进制转为二进制,基本原理不明确。十进制整数转换为二进制整数,采用"除2取余,逆序排列"法 ...

1、if语句执行完,到return返回,之后是不是接着再次进入if语句进行判断
2、return 语句出来的值   result + str(dec % 2)最后返回给谁了

Peteryo01223 发表于 2021-4-29 17:40:36

本帖最后由 Peteryo01223 于 2021-4-29 18:17 编辑

woshiamaola 发表于 2021-4-29 17:01
1、if语句执行完,到return返回,之后是不是接着再次进入if语句进行判断
2、return 语句出来的值   resu ...

1. 是的,递归,一层一层重复路径,只不过带入的 result 的量,第一层是4,第二层是2,第三层是1。算完了,再一层一层地,原路退出来。
2. 给了 result。最上面,result 被定义为空。最里面一层执行后,result 是 1。二层执行后,result 是 10。三层执行后,result 是 100。然后,递归停了,Py就把结果打印出来了。

江湖散人 发表于 2021-4-29 22:05:16

我把你的程序简化了一下,然后输入一个数,把每一步的执行结果都写出来了,你看一下。

def D(a):
    b=''
    if a:
      b=D(a//2)
      return b+str(a%2)
    else:
      return b

n=int(input('请输入一个整数:'))
print(D(n))

运行步骤如下:
例如:n=4
第一次调用. b=D(4//2)=D(2)return D(4)=b+str(4%2)=b+'0'=D(2)+'0'
第二次调用. b=D(2//2)=D(1)return D(2)=b+str(2%2)=b+'0'=D(1)+'0'
第三次调用. b=D(1//2)=D(0)return D(1)=b+str(1%2)=b+'1'=D(0)+'1'
第四次调用. return D(0)=b=''
那么最终返回的结果也就是第一次调用的结果(就是递归的结果),
D(4)=D(2)+'0'=D(1)+'0'+'0'=D(0)+'1'+'0'+'0'=''+'1'+'0''0'
=100
页: [1]
查看完整版本: 旧版课后习题 P23 递归