鱼C论坛

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

[已解决]哪位大神给我讲解一下23、24讲课后作业第0题,自己把自己绕进去了

[复制链接]
发表于 2020-4-12 04:11:13 | 显示全部楼层 |阅读模式

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

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

x
0. 使用递归编写一个十进制转换为二进制的函数(要求采用“除2取余”的方式,结果与调用bin()一样返回字符串形式)。

参考代码:
def Dec2Bin(dec):
    result = ''
   
    if dec:
        result = Dec2Bin(dec//2)                #问题:在这里调用自身的话,下面return result + str(dec%2)这一行是否还会执行,result的值是否会初始化
        return result + str(dec%2)                               
    else:
        return result

print(Dec2Bin(62))
最佳答案
2020-4-12 04:53:56
return result + str(dec%2)这一行是倒序执行的。一个简单的例子:
print(Dec2Bin(2)):
初始层:2>0:result=Dec2Bin(2//2=1):#进入第一层递归
1>0,result=Dec2Bin(1//2=0):#进入第二层递归
0=0,执行else:result=''#返回第一层递归,这时候result是空的
return result + str(1%2=1) ,# 这时候result就是'1',然后返回初始层
return result + str(2%2=0) ,#这时候result就是‘10’
然后result='10'被打印出来
希望能被采纳!
   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-12 04:53:56 | 显示全部楼层    本楼为最佳答案   
return result + str(dec%2)这一行是倒序执行的。一个简单的例子:
print(Dec2Bin(2)):
初始层:2>0:result=Dec2Bin(2//2=1):#进入第一层递归
1>0,result=Dec2Bin(1//2=0):#进入第二层递归
0=0,执行else:result=''#返回第一层递归,这时候result是空的
return result + str(1%2=1) ,# 这时候result就是'1',然后返回初始层
return result + str(2%2=0) ,#这时候result就是‘10’
然后result='10'被打印出来
希望能被采纳!
   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-12 08:11:43 | 显示全部楼层
会执行,但不会重复初始化。递归不是重复调用自己,是进入下一层,
这里调用的Dec2Bin并不会影响这一层的Dec2Bin,
最后接收的就是Dec2Bin的返回值(result),
然后拼接到一起。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-4-12 15:41:45 | 显示全部楼层
qiuyouzhi 发表于 2020-4-12 08:11
会执行,但不会重复初始化。递归不是重复调用自己,是进入下一层,
这里调用的Dec2Bin并不会影响这一层的D ...

感谢指点,但觉得楼上的说的更详细一点~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-12 15:42:51 | 显示全部楼层
leon_xinxin 发表于 2020-4-12 04:53
return result + str(dec%2)这一行是倒序执行的。一个简单的例子:
print(Dec2Bin(2)):
初始层:2>0:res ...

感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-28 19:15:16 | 显示全部楼层
qiuyouzhi 发表于 2020-4-12 08:11
会执行,但不会重复初始化。递归不是重复调用自己,是进入下一层,
这里调用的Dec2Bin并不会影响这一层的D ...

‘“会执行,但不会重复初始化。递归不是重复调用自己,是进入下一层。”
这里的局部变量想了半天绕不出来。。
意思是说result='  '在每一层都被调用,上上一层的返回值继续作用回上一层,相当于不断更新result的值。
而返回的result实际上与当层的result不是同一个变量了(只是传回了字符串),因此两个result互不影响。
这里理解对吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-29 08:49:16 | 显示全部楼层
mozhihui 发表于 2020-6-28 19:15
‘“会执行,但不会重复初始化。递归不是重复调用自己,是进入下一层。”
这里的局部变量想了半天绕不出 ...

是的,递归5层,就是5个result拼接起来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-6-29 13:59:16 | 显示全部楼层
qiuyouzhi 发表于 2020-6-29 08:49
是的,递归5层,就是5个result拼接起来。

谢谢!!在递归这里被打击了积极性。。还是先往后看回头再复习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 07:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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