如何在kdb中对数字递归执行取模与地板除法操作?
KDB实现递归取模与地板除法(62进制余数计算)
要实现对数字循环执行取模62并收集余数,再做62的地板除法直到x≤0,核心是正确累加余数列表——如果直接赋值而非追加元素,就会只保留最后一次计算的结果。
正确的KDB实现
循环方式
toBase62Remainders:{[x] res:(); while[x>0; res,:x mod 62; / 使用`,:`运算符追加余数到列表 x:x div 62; / 地板除法更新x的值 ]; res } // 测试示例 toBase62Remainders[11157] / 输出:59 55 2
递归方式
如果偏好递归实现,逻辑是当x≤0时返回空列表,否则将当前余数与递归处理地板除后的值拼接:
toBase62RemaindersRecur:{[x] $[x<=0; (); (x mod 62), toBase62RemaindersRecur[x div 62]] } // 测试示例 toBase62RemaindersRecur[11157] / 输出:59 55 2
Python参考实现
def to_base62_remainders(x): res = [] while x > 0: res.append(x % 62) x = x // 62 return res print(to_base62_remainders(11157)) # 输出: [59, 55, 2]
内容的提问来源于stack exchange,提问作者Utsav
相关产品推荐
相关产品推荐

