雪蝶宿秋风 发表于 2020-8-3 00:16:51

23.24讲课后题第0题的求助

来位大佬讲解下结果是如何出来的,递归函数返回的是一个另一个递归函数和字符串,怎么打印的结果,最好是每步都讲解下,

Twilight6 发表于 2020-8-3 00:27:20

本帖最后由 Twilight6 于 2020-8-3 07:19 编辑


直接拿实例举例子试试看能不能懂,当我们转化 10 这个数字时候:

def Dec2Bin(dec):   
    result = ''         # 设置个字符串,每次递归都会重新赋值为一个空字符串,所以这个函数每次 result 最多也只会返回一个字符

    if dec:   # 只要 dec 参数不为 0 ,那么就始终满足 if 条件,进行递归

      result = Dec2Bin(dec // 2)
      # 这里用了递归 Dec2Bin(10)->Dec2Bin(5)->Dec2Bin(2)->Dec2Bin(1)->Dec2Bin(0)

      return result + str(dec % 2)
      # 然后开始返回值 Dec2Bin(0)->Dec2Bin(1)->Dec2Bin(2)->Dec2Bin(5)->Dec2Bin(10)
      # 返回结果是         ''   +   '1'   +   '0'    +'1'      +    '0'

    else:   # 当 dec 为 0 时,就说明值已经全部求完了,此时直接返回一个 result 作为递归出口
      return result


print(Dec2Bin(10))

zltzlt 发表于 2020-8-3 06:58:59

请见:https://fishc.com.cn/forum.php?mod=viewthread&tid=167696&ctid=1730

雪蝶宿秋风 发表于 2020-8-3 12:15:01

Twilight6 发表于 2020-8-3 00:27
直接拿实例举例子试试看能不能懂,当我们转化 10 这个数字时候:

大佬这里的返回结果为啥是从Dec2bin(0)开始的 而不是从Dec2bin(10)开始的呢

雪蝶宿秋风 发表于 2020-8-3 12:17:10

zltzlt 发表于 2020-8-3 06:58
请见:https://fishc.com.cn/forum.php?mod=viewthread&tid=167696&ctid=1730

谢谢大佬

Twilight6 发表于 2020-8-3 12:17:26

雪蝶宿秋风 发表于 2020-8-3 12:15
大佬这里的返回结果为啥是从Dec2bin(0)开始的 而不是从Dec2bin(10)开始的呢



因为你进入递归 返回时候就要从最里面开始返回,就好比你打开文件夹

雪蝶宿秋风 发表于 2020-8-3 12:21:32

Twilight6 发表于 2020-8-3 12:17
因为你进入递归 返回时候就要从最里面开始返回,就好比你打开文件夹

好的 懂了谢谢大佬
页: [1]
查看完整版本: 23.24讲课后题第0题的求助