2016-11-12 4 views
1

I基本的に終了し、すべて..私はちょうど^ 0 2によって各整数を乗算する方法、2^1を見つけることができない...など にここに私が持っている場合は、私のコードどのように再帰的な方法を使用してバイナリをDecimalに変換できますか?

def BinaryToDecimal(binaryString): 
    if len(binaryString) == 0: 
     return 0 
    else: 
     return int(binaryString[-1:])*(2**(4-len(binaryString))) + BinaryToDecimal(binaryString[:len(binaryString)-1]) 

ある 1000 'を入力し、最後の桁を削除して再帰を行います。' 1000 ' - >' 100 ' - >' 10 'など

ここでの問題は私です最後の数字を2の対応する累乗で乗算する方法を見つけることができません。バイナリ文字列の長さが4,3,2,1のときに0,1,2,3を得る方法について考えていますか?

+2

を、あなただけの 'リターンint型でし(、binaryString 2)' –

答えて

1

これは、必要以上に複雑にしています。パワー計算は必要ありません。

0 0 -> 0 
1 1 -> 1 
2 10 -> 2 
3 11 -> 3 
4 100 -> 4 
5 101 -> 5 
6 110 -> 6 
7 111 -> 7 
8 1000 -> 8 
9 1001 -> 9 
10 1010 -> 10 
11 1011 -> 11 
12 1100 -> 12 
13 1101 -> 13 
14 1110 -> 14 
15 1111 -> 15 

def binary_to_decimal(bstring): 
    if not bstring: 
     return 0 
    return binary_to_decimal(bstring[:-1]) * 2 + int(bstring[-1]) 

# Test 

for i in range(16): 
    b = format(i, 'b') 
    n = binary_to_decimal(b) 
    print('{:2} {:4} -> {}'.format(i, b, n)) 

出力はまた、この機能は正常に先行ゼロを処理します。

for i in range(16): 
    b = format(i, '05b') 
    n = binary_to_decimal(b) 
    print('{:2} {} -> {}'.format(i, b, n)) 

出力

0 00000 -> 0 
1 00001 -> 1 
2 00010 -> 2 
3 00011 -> 3 
4 00100 -> 4 
5 00101 -> 5 
6 00110 -> 6 
7 00111 -> 7 
8 01000 -> 8 
9 01001 -> 9 
10 01010 -> 10 
11 01011 -> 11 
12 01100 -> 12 
13 01101 -> 13 
14 01110 -> 14 
15 01111 -> 15 
を我々は唯一の有効な文字列渡されると仮定した場合

実は、私たちも、そのint呼び出しを必要としない:ところで

def binary_to_decimal(bstring): 
    if not bstring: 
     return 0 
    return binary_to_decimal(bstring[:-1]) * 2 + (bstring[-1] == '1') 
+0

ああああ...これは、この方法を使用する方がずっと簡単で簡単です。ありがとうございました –

0

あなたは再帰的にこれを見ていた後(運動など)の数を解析しようとしている場合:

def parse_binary(binary_string, power): 
    if len(binary_string) == 0: 
     return 0 
    last_digit = int(binary_string[-1]) * (2**power) 
    return last_digit + parse_binary(binary_string[:-1], power+1) 

def BinaryToDecimal(binary_string): 
    return parse_binary(binary_string, 0) 

をしかし、あなたはこれを効率的に行いたい場合は、単純int(binary_string, 2)を呼び出します。

+0

あなたはデフォルトの 'power = 0'とすることができ、その後パラメータは渡される必要はありません –

+0

@ cricket_007しかし、まだそこにあります。それは適切なラッピングです。 – freakish

関連する問題