Python 递归地从十进制到十六进制

Python 递归地从十进制到十六进制,python,recursion,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):

我可以让函数定期工作,但当我递归地执行它时,它会在内部重复,我必须“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将_10_转换为_16(n):
hexlist=[]
x=n//16
如果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
如果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')
返回“”。加入(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)
def将_10_转换为_16(n):
hexlist=[]
x=n//16
如果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
如果y<10:
hexlist.append(y)
elif y>=10:
z=y
将_10_转换为_16(z)

我不知道如何才能让它递归工作,因此非常感谢您的帮助

您需要一个递归案例和一个基本案例

但更重要的是使用有意义的变量名

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(last_digit)
    else:
        return convert_number_to_hex(remaining_digits) + convert_digit_to_hex(last_digit)
def将数字转换为十六进制(x):
如果x<10:
返回str(x)
elif(x==10):
返回“A”
elif(x==11):
返回“B”
elif(x==12):
返回“C”
elif(x==13):
返回'D'
elif(x==14):
返回“E”
elif(x==15):
返回“F”
def将数字转换为十六进制(n):
剩余数字=n//16
最后一位=n%16
如果剩余的_位数==0:
返回将数字转换为十六进制(最后一位)
其他:
返回将数字转换为十六进制(剩余的数字)+将数字转换为十六进制(最后的数字)

在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()

这可以简单、递归地完成,无需内置函数和
列表
数据结构:

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))

缩进在我的python shell中是正确的。我猜你知道你可以做的
断言'A'==hex(10).upper()[-1]
,对吗
hex
是一个内置函数,具有。我们不能使用内置python函数:/Why不能使用内置函数?你的经理疯了。我会向人力资源部投诉。意思是,像“第一个数字”是最后一个数字你切换了这两个,所以你有一个bug。@KarolyHorvath:是我做的。
n
x
对我都没有意义。而且
str()
是一个内置函数,不是吗?嗯……这根本不是递归的!即使这不是递归的,函数“%X”或“%X”仍会将十进制更改为十六进制。当然,如果有人要求递归解决方案,则该解决方案应该是递归的!