我跟踪了以下代码,而其中的一部分对我来说毫无意义:
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)
。我知道没有添加项将无法正常工作,但我无法确定为什么存在添加项。
答案 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'
...这是正确的答案。那应该有助于清除您的理解。