当我运行代码时,我得到了“比较超出最大递归深度”错误。我不确定要解决这个问题的代码部分。这个numToBinary函数基本上应该将数字n转换为位大小为k的二进制数。我非常感谢有关如何解决此问题的任何意见!
def numToBinary(k, n):
''' converts number to binary number bit size k'''
def binary(n):
if n == 0:
return ''
elif n%2 == 1:
return binary(n/2)+'1'
else:
return binary(n/2)+ '0'
temp = binary(n)
if len(temp) <= k:
answer = '0' * (k - len(temp)) + temp
elif len(temp) > k:
answer = temp[-k:]
return answer
print (numToBinary(6, 10))
答案 0 :(得分:1)
你需要在{3} /
中使用地板分割,加倍/
,这样你就可以从n/2
得到浮点数:
def binary(n):
if n == 0:
return ''
elif n%2 == 1:
return binary(n//2) + '1' # // floor
else:
return binary(n//2)+ '0' # // floor
进行更改后,它会正常工作:
In [50]: numToBinary(6, 10)
Out[50]: '001010'
如果临时温度不是&lt; =那么它必须大于:{/ p>,你也可以用else
代替elif
。
def numToBinary(k, n):
''' converts number to binary number bit size k'''
def binary(n):
if n == 0:
return ''
elif n % 2 == 1:
return binary(n//2)+'1'
else:
return binary(n//2) + '0'
temp = binary(n)
if len(temp) <= k:
answer = '0' * (k - len(temp)) + temp
else:
answer = temp[-k:]
return answer
如果你想确切地看到发生了什么,你应该在你自己的代码中打印一个打印,如果你在二进制文件中添加了一个print(n),你会看到很多输出,如:
5.125332723668738e-143
2.562666361834369e-143
1.2813331809171846e-143
6.406665904585923e-144
3.2033329522929615e-144
这意味着你最终达到了递归限制。