Python中的二进制到十进制(代码修改为递归?)

问题描述 投票:-1回答:3

上周我的家庭作业之一是编写一个Python方法,该方法将二进制作为参数数组,然后结果将给定的二进制返回十进制。

我试图找出递归的解决方案,但截止日期之前时间已用尽,所以没有以递归的方式解决这一问题。也许解决方案很简单。我该怎么办?

我对老师收件箱的最后选择是这段代码:

def binToDec (arr):
    arr.reverse()
    result = 0
    for x in range(0,len(arr)):
        result+=arr[x]*pow(2,x)
    return result

arr = [1,1,0,0] 
result = binToDec(arr)
print (arr)
print (result)
python recursion binary decimal
3个回答
2
投票

所有循环都可以转换为尾递归。

def bin_to_dec(arr):
    if not arr:
        return 0
    return arr[-1] + (bin_to_dec(arr[:-1]) << 1)


print(bin_to_dec([1, 1, 0, 0]))

输出:

12

如果您对索引感到困惑,这是更具可读性的代码:

def bin_to_dec(arr):
    if not arr:
        return 0
    *rest, lsb = arr
    return lsb + (bin_to_dec(rest) << 1)

与上面相同的输出。


1
投票

首先,通常将输入数组反转作为副作用被认为是不好的做法。而且pow在这里真的太过分了。恕我直言,迭代函数将更像Pythonic:

def binToDec (arr):
    result = 0
    coeff = 1
    for x in reversed(arr):
        result+=x*coeff
        coeff *=2
    return result

递归方法可以简单地通过获取最低有效位,并将其添加为数组其余值的两倍的方式来构建。在Python中,它只写:

def recursBinToDec(arr):
    if 0 == len(arr):
        return 0
    else:
        return arr[-1] + 2 * recursBinToDec(arr[:-1])

0
投票

有关递归代码,请查看此链接https://www.geeksforgeeks.org/recursive-program-for-binary-to-decimal/

有一个图形表示,显示了我们必须如何添加所有值。因此,我们采用当前值,将其添加,然后对剩余项进行递归。链接上的代码是不言自明的。


-1
投票

无需使用递归解决方案,您可以简单地使用python函数中的内置函数,

尝试一下:

def binToDec(arr):
    binary_text = "".join(map(str, arr))
    return int(binary_text, 2)
© www.soinside.com 2019 - 2024. All rights reserved.