鱼C论坛

 找回密码
 立即注册
查看: 2322|回复: 7

[已解决]旧版课后习题 P23 递归

[复制链接]
发表于 2021-4-29 14:22:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
不能理解此处 if的使用
当dec =2和3的时候
可以按照流程一步一步走下来
dec = 4
我就蒙了
if dec:
        result = Dec2Bin(dec // 2)
        return result + str(dec % 2)
最佳答案
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
捕获.JPG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-29 15:02:58 From FishC Mobile | 显示全部楼层
一步步来呗,
要不然把你思路写出来我们帮你分析分析
就三步啊也不至于
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-29 15:23:41 From FishC Mobile | 显示全部楼层
少一次循环啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-29 16:42:10 | 显示全部楼层
本帖最后由 Peteryo01223 于 2021-4-29 16:44 编辑

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

对于4来说,这三次除法后,除数为0了,不符合 if 的要求了,因而自动跳出循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

1、if语句执行完,到return返回,之后是不是接着再次进入if语句进行判断
2、return 语句出来的值   result + str(dec % 2)  最后返回给谁了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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就把结果打印出来了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 00:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表