如何理解二进制表示函数的递归

时间:2018-08-14 19:52:54

标签: python recursion

我跟踪了以下代码,而其中的一部分对我来说毫无意义:

def bin_rep(n: int) -> str:
     """Return the binary representation of n
     >>> bin_rep(0)
     "0"
     >>> bin_rep(1)
     "1"
     >>> bin_rep(5)
     "101"
     """

     if n > 1:
         return bin_rep(n // 2) + bin_rep(n % 2)
     else:
         return str(n)

我不理解的部分是,为什么要添加bin_rep(n//2)bin_rep(n%2)。我知道没有添加项将无法正常工作,但我无法确定为什么存在添加项。

2 个答案:

答案 0 :(得分:4)

那不是加法。 bin_rep返回一个字符串。类型字符串的+运算符是串联。读为

binary representation of n right-shifted a bit
    concatenated with
binary representation of n's right-most bit

可以清除吗?

答案 1 :(得分:1)

bin_rep(n)返回n的二进制字符串表示形式。

终止条件为n <= 1,即bin_rep(0) -> '0'bin_rep(1) -> '1'

bin_rep(2)必须返回'10'。为此,它将计算:

bin_rep(2 // 2) + bin_rep(n % 2)
bin_rep(1) + bin_rep(0)
'1' + '0'  # String concatenation, not decimal addition!
'10'

...这是正确的答案。那应该有助于清除您的理解。