Siguu 发表于 2020-12-2 15:58:26

递归的执行问题

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的结果就是在一层层返回的过程中将每一位用字符串拼接出来的

Siguu 发表于 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)了。

昨非 发表于 2020-12-2 16:22:27

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

先执行到底,在层层返回
然后每一层里都存了一个result+str(dec%2)
返回一层加一个
最后拼到一起就是完整的答案

Siguu 发表于 2020-12-2 16:51:56

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


好的,十分感谢!~

昨非 发表于 2020-12-2 16:54:52

Siguu 发表于 2020-12-2 16:51
好的,十分感谢!~

小事儿,
解决了记得设置最佳答案哈{:10_297:}

Siguu 发表于 2020-12-2 16:58:11

昨非 发表于 2020-12-2 16:54
小事儿,
解决了记得设置最佳答案哈

{:10_297:}
页: [1]
查看完整版本: 递归的执行问题