You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归判断给定整数每一位是否小于base(OCaml循环递归伪代码)

递归判断整数每一位是否小于指定Base值(OCaml实现)

嘿,咱们来搞定这个用递归判断整数每一位是否小于指定base的OCaml实现问题!递归处理这类逐位检查的场景特别顺手,核心思路就是把大问题拆成小问题——每次只检查当前数的最后一位,剩下的部分交给递归逻辑处理就行。

核心逻辑拆解

先把递归的关键步骤理清楚:

  • 基础情况:当输入的整数 n 变成0时,说明所有位都检查通过了,直接返回 true
  • 递归步骤:
    1. 先处理负数:数字的每一位只看绝对值,所以先取 n 的绝对值
    2. 提取最后一位数字:用取模运算 abs(n) mod 10 就能拿到
    3. 校验当前位:如果这个数字不小于指定的 base,直接返回 false
    4. 递归处理剩余部分:如果当前位符合要求,就递归调用函数处理去掉最后一位后的数(也就是 abs(n) / 10)

另外要注意:base 的取值得合理,因为数字的每一位范围是0-9,所以 base 应该在1到10之间(如果base<=0,所有数字都不可能小于它;base>10的话,所有数字都满足条件)。

OCaml 递归实现伪代码

(* 递归函数:判断整数n的每一位是否都小于base *)
let rec all_digits_less_than_base n base =
  (* 可选:处理base不合法的输入 *)
  if base <= 0 || base > 10 then
    invalid_arg "base must be between 1 and 10"
  else
    let abs_n = abs n in
    (* 基础情况:所有位检查完毕 *)
    if abs_n = 0 then
      true
    else
      let last_digit = abs_n mod 10 in
      (* 检查当前位,再递归处理剩余部分 *)
      last_digit < base && all_digits_less_than_base (abs_n / 10) base

测试示例参考

咱们可以用几个例子验证逻辑:

  • all_digits_less_than_base 123 4:每一位1、2、3都小于4,返回 true
  • all_digits_less_than_base 567 6:最后一位7不小于6,返回 false
  • all_digits_less_than_base -89 9:绝对值89的两位8、9,其中9不小于9,返回 false

这个实现既覆盖了正数、负数的场景,还加了base合法性校验,逻辑很完整。

内容的提问来源于stack exchange,提问作者W.W

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:06:52