鱼C论坛

 找回密码
 立即注册
查看: 1749|回复: 6

[已解决]递归的执行问题

[复制链接]
发表于 2020-12-2 15:58:26 | 显示全部楼层 |阅读模式

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

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

x
def Dec2Bin(dec):
    result = ''
   
    if dec:
        result = Dec2Bin(dec//2)
        return result + str(dec%2)
    else:
        return result

这串代码在运行的过程中,为什么不会出现每次都把result赋值为'' 即空字符串的情况?
最佳答案
2020-12-2 16:06:45
本帖最后由 昨非 于 2020-12-2 16:13 编辑

向下递归的过程中每一个result都是新的(空的),只存储结果一位
所以每层都要清空
而真正有用的部分已经通过return result + str(dec%2)语句返回给上一层了

而result的结果就是在一层层返回的过程中将每一位用字符串拼接出来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-2 16:06:45 | 显示全部楼层    本楼为最佳答案   
本帖最后由 昨非 于 2020-12-2 16:13 编辑

向下递归的过程中每一个result都是新的(空的),只存储结果一位
所以每层都要清空
而真正有用的部分已经通过return result + str(dec%2)语句返回给上一层了

而result的结果就是在一层层返回的过程中将每一位用字符串拼接出来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-2 16:16:55 | 显示全部楼层
昨非 发表于 2020-12-2 16:06
运行中result只存储结果一位
所以每层都要清空
而真正有用的部分已经通过return result + str(dec%2)语句 ...

那请问大佬,这串程序的执行顺序是怎么样的呢,我不太明白到底是先把Dec2Bin(dec//2)执行到底,还是执行一个Dec2Bin(dec//2) 就去执行return result + str(dec%2)  了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-2 16:22:27 | 显示全部楼层
Siguu 发表于 2020-12-2 16:16
那请问大佬,这串程序的执行顺序是怎么样的呢,我不太明白到底是先把Dec2Bin(dec//2)执行到底,还是执行 ...

先执行到底,在层层返回
然后每一层里都存了一个result+str(dec%2)
返回一层加一个
最后拼到一起就是完整的答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-2 16:51:56 | 显示全部楼层
昨非 发表于 2020-12-2 16:22
先执行到底,在层层返回
然后每一层里都存了一个result+str(dec%2)
返回一层加一个

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

使用道具 举报

发表于 2020-12-2 16:54:52 | 显示全部楼层
Siguu 发表于 2020-12-2 16:51
好的,十分感谢!~

小事儿,
解决了记得设置最佳答案哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-2 16:58:11 | 显示全部楼层
昨非 发表于 2020-12-2 16:54
小事儿,
解决了记得设置最佳答案哈

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-17 05:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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