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

Prolog递归实现LCM时变量未按常量递增的bug修复咨询

修复Prolog最小公倍数计算代码的方案

问题根因

原代码的核心缺陷是递归调用时直接修改了输入参数,丢失了两个输入数的原始基准值,每次递增是在当前值基础上翻倍,而非叠加原始固定值,因此会陷入死循环,永远无法得到符合整除条件的结果。

修改后的完整代码

% 对外暴露的LCM计算入口
lcm(A, B, X) :-
    A =:= B,
    X is A,
    !.
lcm(A, B, X) :-
    % 传入原始A、B作为固定累加基准,启动辅助递归
    lcm_helper(A, B, A, B, X).

% 辅助递归谓词:参数依次为当前A值、当前B值、原始A基准、原始B基准、结果值
lcm_helper(CurrA, CurrB, _, _, CurrA) :-
    CurrA >= CurrB,
    CurrA mod CurrB =:= 0,
    !.
lcm_helper(CurrA, CurrB, _, _, CurrB) :-
    CurrB > CurrA,
    CurrB mod CurrA =:= 0,
    !.
lcm_helper(CurrA, CurrB, OrigA, OrigB, X) :-
    CurrA < CurrB,
    NewA is CurrA + OrigA,
    lcm_helper(NewA, CurrB, OrigA, OrigB, X).
lcm_helper(CurrA, CurrB, OrigA, OrigB, X) :-
    CurrB < CurrA,
    NewB is CurrB + OrigB,
    lcm_helper(CurrA, NewB, OrigA, OrigB, X).

效果验证

查询lcm(16,10,X)会按照预期流程执行,最终返回X = 80,符合最小公倍数的计算要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:54:07