鱼C论坛

 找回密码
 立即注册
查看: 2201|回复: 2

[已解决]函数递归步骤不明白

[复制链接]
发表于 2022-9-23 11:25:04 | 显示全部楼层 |阅读模式

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

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

x
def dec2bin(dec):
    r = ''
    if dec :
        r = dec2bin(dec//2)
        return  r+str(dec%2)
    else :
        return r
print(dec2bin(5))

我就是有点懵逼,这里假设我输入5进去,那么函数会一直在r = dec3bin(dec//2)那边运行,那按照这样第一次 r= dec2bin(2),然后第二次 r = dec2bin(0),这样最后进到else里面返回的 r 不是等于0了么?
这个递归步骤我着实有点蒙,有没有大佬可以帮忙把步骤讲解一下的?
最佳答案
2022-9-23 13:55:56
本帖最后由 jackz007 于 2022-9-23 14:35 编辑

        递归过程在 dec = 0 的时候到底,当 dec = 5 的时候,总共需要递归 4 次,其详细过程为:
 第1次:dec2bin(5) = dec2bin(5 // 2) + str(5 % 2) = dec2bin(2) + '1'
 第2次:dec2bin(2) = dec2bin(2 // 2) + str(2 % 2) = dec2bin(1) + '0'
 第3次:dec2bin(1) = dec2bin(1 // 2) + str(1 % 2) = dec2bin(0) + '1'
 第4次:dec2bin(0) = ''
       递归过程到了 dec2bin(0) 的时候,终于有了确切的结果 dec2bin(0) = '',代入 dec2bin(1), dec2bin(1) = dec2bin(0) + '1' = '' + '1' = '1' ,代入 dec2bin(2),dec2bin(2) = dec2bin(1) + '0' = '1' + '0' = '10',最后,代入 dec2bin(5),dec2bin(5) = dec2bin(2) + '1' = '10' + '1' = '101'。
       把这个过程写成一个等式那就是:
dec2bin(5) = dec2bin(2) + '1' = dec2bin(1) + '0' + '1' = dec2bin(0) + '1' + '0' + '1' = '' + '1' + '0' + '1' = '101'

       函数 dec2bin() 可以简化成只有 1 条语句
def dec2bin(dec):
    return dec2bin(dec // 2) + str(dec % 2) if dec > 0 else ''
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-23 11:31:49 | 显示全部楼层


看看这个帖子吧,同样的问题,列出了 10 传入时的递归步骤:

https://fishc.com.cn/forum.php?m ... 816&pid=5254671

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

使用道具 举报

发表于 2022-9-23 13:55:56 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-9-23 14:35 编辑

        递归过程在 dec = 0 的时候到底,当 dec = 5 的时候,总共需要递归 4 次,其详细过程为:
 第1次:dec2bin(5) = dec2bin(5 // 2) + str(5 % 2) = dec2bin(2) + '1'
 第2次:dec2bin(2) = dec2bin(2 // 2) + str(2 % 2) = dec2bin(1) + '0'
 第3次:dec2bin(1) = dec2bin(1 // 2) + str(1 % 2) = dec2bin(0) + '1'
 第4次:dec2bin(0) = ''
       递归过程到了 dec2bin(0) 的时候,终于有了确切的结果 dec2bin(0) = '',代入 dec2bin(1), dec2bin(1) = dec2bin(0) + '1' = '' + '1' = '1' ,代入 dec2bin(2),dec2bin(2) = dec2bin(1) + '0' = '1' + '0' = '10',最后,代入 dec2bin(5),dec2bin(5) = dec2bin(2) + '1' = '10' + '1' = '101'。
       把这个过程写成一个等式那就是:
dec2bin(5) = dec2bin(2) + '1' = dec2bin(1) + '0' + '1' = dec2bin(0) + '1' + '0' + '1' = '' + '1' + '0' + '1' = '101'

       函数 dec2bin() 可以简化成只有 1 条语句
def dec2bin(dec):
    return dec2bin(dec // 2) + str(dec % 2) if dec > 0 else ''
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-10 18:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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