十进制到十六进制递归python

时间:2015-04-26 19:23:25

标签: python recursion

我可以让函数定期工作但是当我递归地执行它时,它会无限重复,我必须'Ctrl C'才能在shell中结束它。

非递归

def convert_10_to_16(n):
  hexlist =[]
  x = n // 16
  if x < 10:
    hexlist.append(x)
  elif (x == 10):
    hexlist.append('A')
  elif (x == 11):
    hexlist.append('B')
  elif (x == 12):
    hexlist.append('C')
  elif (x == 13):
    hexlist.append('D')
  elif (x == 14):
    hexlist.append('E')
  elif (x == 15):
    hexlist.append('F')

  y = n % 16
  if y < 10:
    hexlist.append(y)
  elif (y == 10):
    hexlist.append('A')
  elif (y == 11):
    hexlist.append('B')
  elif (y == 12):
    hexlist.append('C')
  elif (y == 13):
    hexlist.append('D')
  elif (y == 14):
    hexlist.append('E')
  elif (y == 15):
    hexlist.append('F')
  return ''.join(hexlist)

递归

def convert_10_to_16(n):
  hexlist =[]
  x = n // 16
  if x < 10:
    hexlist.append(x)
  elif (x == 10):
    hexlist.append('A')
  elif (x == 11):
    hexlist.append('B')
  elif (x == 12):
    hexlist.append('C')
  elif (x == 13):
    hexlist.append('D')
  elif (x == 14):
    hexlist.append('E')
  elif (x == 15):
    hexlist.append('F')

  y = n % 16
  if y < 10:
    hexlist.append(y)
  elif y >= 10:
    z = y 
    convert_10_to_16(z)

我不确定如何让它以递归的方式工作,所以非常感谢任何帮助!

3 个答案:

答案 0 :(得分:0)

你需要一个递归的案例和一个基本案例。

但更重要的是使用具有含义的变量名称。

def convert_digit_to_hex(x):
    if x < 10:
        return str(x)
    elif (x == 10):
        return 'A'
    elif (x == 11):
        return 'B'
    elif (x == 12):
        return 'C'
    elif (x == 13):
        return 'D'
    elif (x == 14):
        return 'E'
    elif (x == 15):
        return 'F'

def convert_number_to_hex(n):
    remaining_digits = n // 16
    last_digit       = n % 16

    if remaining_digits == 0:
        return convert_digit_to_hex(first_digit)
    else:
        return convert_number_to_hex(remaining_digits) + convert_digit_to_hex(last_digit)

答案 1 :(得分:0)

这可以简单,递归地完成,而无需内置函数并且不需要list数据结构:

DIGITS = "0123456789ABCDEF"

def convert_10_to_16(number):
    number, remainder = number // 16, DIGITS[number % 16]

    if number:
        return convert_10_to_16(number) + remainder

    return remainder

if __name__ == "__main__":

    for number in range(257):
        print(number, '=', convert_10_to_16(number))

答案 2 :(得分:-1)

在python中执行将十进制转换为十六进制的递归函数时,可以使用字符串格式操作符“%”。通过使用“%x”或“%X”,它有助于将十进制转换为十六进制。

def main():
    #Asks user for decimal
    number = int(input("Enter a decimal: "))
    num = convert(number)
    print(num)

def convert(dec):
    #Converts the decimal to hexadecimal
    hex = "%X" % dec
    print("The hexadecimal is: ", end="")
    #Prints hexadecimal
    return hex

main()