在python中使用递归将十进制转换为二进制、八进制和十六进制

在python中使用递归将十进制转换为二进制、八进制和十六进制,python,recursion,stack,Python,Recursion,Stack,我尝试将十进制转换为二进制、八进制和十六进制,我需要使用递归,并且不使用内置的输出 Decimal: 10 Decimal to Binary: 01010 Decimal to Octa: 12 Decimal to Hexa: A 到目前为止,我只得到了这个没有递归的求解方法 decimal = int(input("Input decimal:")) #convert binary def bin(decimal): if decimal >= 1:

我尝试将十进制转换为二进制、八进制和十六进制,我需要使用递归,并且不使用内置的输出

Decimal: 10
Decimal to Binary: 01010
Decimal to Octa: 12
Decimal to Hexa: A
到目前为止,我只得到了这个没有递归的求解方法

decimal = int(input("Input decimal:"))
#convert binary
def bin(decimal):
    if decimal >= 1:
        bi(decimal // 2)
    return decimal % 2
#convert octa
def octa(decimal):
    if decimal >= 1:
        octa(decimal // 8)
    return decimal % 8
def hex(decimal):
    if decimal >= 1:
        hex(decimal // 16)
    return decimal % 16

是否有一种方法可以使它更简单,只需使用一个带有递归的
def

是的,您可以通过将数字和基数作为输入来实现 我们知道二进制的基值是2,八进制的基值是8,十六进制的基值是16 请尝试以下代码

import math
def func(num, base):
    count=0
    while int(num/math.pow(base,(count+1))) > 0:
        count=count+1
    new = []
    while num >= 0:
        p = math.pow(base,count)
        if p == 1:
            new.append(num)
            break
        new.append(int(num / p))
        num = num- new[-1]*p
        count=count-1
    s=""
    for i in new:
        s=s+str(int(i))
    return s
num=int(input())
base=int(input())
print(func(num,base))

可以使用单个递归函数完成,如下所示:

  • 作为函数参数的base
  • 默认数字作为参数,用于覆盖不同基数的不同数字
代码

def convert(n, base, digits = "0123456789ABCDEF"):
    ' Function to convert decimal number binary another base '
    if n >= base:
       return convert(n//base, base) + digits[n%base]
    else:
        return digits[n]
    
测试

n = 10                    # Decimal number
for base in [2, 8, 16]:   # Bases
    print(f'Decimal {n} to base {base} = {convert(n, base)}')
Decimal 10 to base 2 = 1010
Decimal 10 to base 8 = 12
Decimal 10 to base 16 = A
输出

n = 10                    # Decimal number
for base in [2, 8, 16]:   # Bases
    print(f'Decimal {n} to base {base} = {convert(n, base)}')
Decimal 10 to base 2 = 1010
Decimal 10 to base 8 = 12
Decimal 10 to base 16 = A