好的,在任何递归函数中,必须有一些函数变为零才能停止。在这种情况下,您想要的是真正模拟您手动执行的方式:
- 除以基数(基数)
- 将剩余部分作为数字放入
- recur 使用相同的基数,但除法的另一部分。(商。)
也就是说,如果您要找到 1000 的十六进制值,则取
dec2base(1000,16):
- 如果第一个参数== 0,返回,你就完成了
- 1000 mod 16 (=8) -> 保存 8
- dec2base(62, 16) -> 递归步骤
现在,很明显,每次你进行recusion step,第一个参数都会变小,如果你仔细想想,它最终必须变为0。所以最终它会终止。
这是 Python 中一个真正简单的版本:
result = ""
def dec2base(n,b):
global result
if n <= 0: return
result = str(n % b) + result # why am I prepending it?
dec2base( n // b, b)
if __name__ == '__main__':
dec2base(1000,8)
print result
现在,如果基数大于 9(比如 16),则需要将值从 10 转换为 15 到 alpha af,这故意不是很优雅,因为我希望它像示例一样布局。