我正在尝试将 int 递归转换为二进制字符串,但我并不真正了解整个正整数到二进制字符串转换的工作原理。
还发现显然每个位置都代表了 2 的幂。
如上面的谷歌示例所示,任何关于如何将正整数转换为字符串表示的解释都非常有帮助。
我正在尝试将 int 递归转换为二进制字符串,但我并不真正了解整个正整数到二进制字符串转换的工作原理。
还发现显然每个位置都代表了 2 的幂。
如上面的谷歌示例所示,任何关于如何将正整数转换为字符串表示的解释都非常有帮助。
这是将 int 转换为二进制字符串的递归实现,这是我认为这个问题所要求的:
def recursive_bin(i):
if i == 0:
return ''
elif i < 0:
return '-' + recursive_bin(-i)
else:
return recursive_bin(i>>1) + str(i&1)
请注意,这仅作为递归练习有用,如果您只是想获取二进制字符串,请使用内置bin()
函数。
这是有效的,因为i&1
会给你最后一位i
(要么0
或1
),并将i>>1
所有位i
向右移动一位(相当于除以 2)。这是对 6 (110 2 ) 的解释:
# 6 is 110 in binary
recursive_bin(6)
recursive_bin(6>>1) + str(6 & 1) -> recursive_bin(3) + '0'
recursive_bin(3>>1) + str(3 & 1) + '0' -> recursive_bin(1) + '1' + '0'
recursive_bin(1>>1) + str(1 & 1) + '10' -> recursive_bin(0) + '1' + '10'
recursive_bin(0) + '110' -> '' + '110'
# Final result is '110', since the base case of 0 returns an empty string
Python 有一个内置函数:
>>> bin(6)
"0b110"
反过来(有点):
>>> 0b110
6