使用递归的二进制到十进制,python(binary to decimal using recursion,python)

系统教程 行业动态 更新时间:2024-06-14 16:58:29
使用递归的二进制到十进制,python(binary to decimal using recursion,python)

需要帮助使用递归将二进制转换为十进制。

到目前为止我有:

(2 * int(s [0]))+ int(s [1])

当s == 0和s == 1时的基本情况。

我不确定如何递归传递这个函数,以便函数将通过输入中的所有1和0。

Need help converting binary to decimal, using recursion.

So far I have :

(2* int(s[0])) + int(s[1])

with base cases for when s==0 and s==1.

I'm not sure how to pass this recursively so that the function will pass through all 1's and 0's in input,s.

最满意答案

基本的想法是选择字符串的最后一个字符并将其转换为数字,然后乘以适当的2的幂。我已经为您评论了代码。

# we need to keep track of the current string, # the power of two, and the total (decimal) def placeToInt (str, pow, total): # if the length of the string is one, # we won't call the function anymore if (len(str) == 1): # return the number, 0 or 1, in the string # times 2 raised to the current power, # plus the already accumulated total return int(str) * (2 ** pow) + total else: # grab the last digit, a 0 or 1 num = int(str[-1:]) # the representation in binary is 2 raised to the given power, # times the number (0 or 1) # add this to the total total += (num * (2 ** pow)) # return, since the string has more digits return placeToInt(str[:-1], pow + 1, total) # test case # appropriately returns 21 print(placeToInt("10101", 0, 0))

现在,让我们手动完成它,这样您就可以理解为什么会这样。

# n = 101 (in binary # this can also be represented as 1*(2^2) + 0*(2^1) + 1*(2^0) # alternatively, since there are three digits in this binary number # 1*(2^(n-1)) + 0*(2^(n-2)) + 1*(2^(n-3))

那么这是什么意思? 好吧,最右边的数字是1或0倍2上升到零的幂。 换句话说,它要么总计加1或0。 那第二个最右边的数字怎么样? 它要么总计加0或2。 下一个? 0或4.看模式?

让我们写下伪代码:

let n = input, in binary total = 0 power of 2 = 0 while n has a length: lastDigit = last digit of n add (2^pow)*lastDigit to the current total

由于我们从一个功率开始,总共为0,你可以看到为什么这个有效。

The basic idea is to pick off the last character of the string and convert that to a number, then multiply it by the appropriate power of 2. I've commented the code for you.

# we need to keep track of the current string, # the power of two, and the total (decimal) def placeToInt (str, pow, total): # if the length of the string is one, # we won't call the function anymore if (len(str) == 1): # return the number, 0 or 1, in the string # times 2 raised to the current power, # plus the already accumulated total return int(str) * (2 ** pow) + total else: # grab the last digit, a 0 or 1 num = int(str[-1:]) # the representation in binary is 2 raised to the given power, # times the number (0 or 1) # add this to the total total += (num * (2 ** pow)) # return, since the string has more digits return placeToInt(str[:-1], pow + 1, total) # test case # appropriately returns 21 print(placeToInt("10101", 0, 0))

Now, let's go through it manually, so you understand why this works.

# n = 101 (in binary # this can also be represented as 1*(2^2) + 0*(2^1) + 1*(2^0) # alternatively, since there are three digits in this binary number # 1*(2^(n-1)) + 0*(2^(n-2)) + 1*(2^(n-3))

So what does this mean? Well, the rightmost digit is 1 or 0 times 2 raised to the power of zero. In other words, it either adds 1 or 0 to the total. What about the second rightmost digit? It either adds 0 or 2 to the total. The next one? 0 or 4. See the pattern?

Let's write the pseudocode:

let n = input, in binary total = 0 power of 2 = 0 while n has a length: lastDigit = last digit of n add (2^pow)*lastDigit to the current total

Since we start with a power and a total of 0, you can see why this works.

更多推荐

本文发布于:2023-04-15 03:20:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/dzcp/1296ba38a15055ae6073f4ba2441d41e.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:递归   制到十进制   python   recursion   decimal

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!