さて、再帰関数には、何かを停止させるためにゼロになる関数が必要です。この場合、あなたが望むのは、手動で行う方法を実際にモデル化することです。
- 基数 (基数) で割る
- 余りを数字で入れる
- 同じベースを使用して繰り返しますが、除算の他の部分を使用します。(商。)
つまり、1000 の 16 進値を見つけている場合は、
dec2base(1000,16):
- 最初のパラメーター == 0 の場合、戻ります。完了です
- 1000 mod 16 (=8) -> 8 を保存
- dec2base(62, 16) -> 再帰ステップ
さて、再帰ステップを行うたびに、最初のパラメーターが小さくなり、考えてみると、最終的には 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 までの値をアルファ af に変換する必要があります。これは、例のようにレイアウトしたかったため、意図的にあまりエレガントではありません。