季夏。。。 发表于 2022-9-23 11:25:04

函数递归步骤不明白

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

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

Twilight6 发表于 2022-9-23 11:31:49



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

https://fishc.com.cn/forum.php?mod=redirect&goto=findpost&ptid=190816&pid=5254671

jackz007 发表于 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 ''
页: [1]
查看完整版本: 函数递归步骤不明白