如何修复python代码中“超出最大递归深度”错误?

时间:2016-03-10 00:29:22

标签: python-3.x

当我运行代码时,我得到了“比较超出最大递归深度”错误。我不确定要解决这个问题的代码部分。这个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))

1 个答案:

答案 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

这意味着你最终达到了递归限制。