OCaml实现杨辉三角:获取下一行列表的函数开发求助
OCaml 杨辉三角下一行生成函数实现
基于你现有代码的完善方案
你已经搭建了递归框架,只需要补充相邻元素求和的逻辑,并处理首尾加1的收尾工作:
let rec next_line lst acc = match lst with | [] -> [1] (* 空输入对应杨辉三角第一行 *) | [_] -> 1 :: List.rev acc @ [1] (* 处理完所有相邻对,首尾加1得到结果 *) | hd :: next :: tl -> next_line (next :: tl) ((hd + next) :: acc) (* 计算相邻元素和,存入累加器 *) (* 包装函数,无需手动传入累加器 *) let get_next_line lst = next_line lst []
逻辑说明
- 递归终止条件:
- 当输入列表为空时,返回杨辉三角的第一行
[1]。 - 当输入列表只剩一个元素时,说明所有相邻元素对已处理完成:反转累加器(因为累加时是从左到右存储,结果为逆序),然后在首尾各添加1,得到完整的下一行。
- 当输入列表为空时,返回杨辉三角的第一行
- 递归处理逻辑:
- 当列表有至少两个元素时,计算前两个元素的和,将结果存入累加器,然后递归处理从第二个元素开始的剩余列表。
测试示例
get_next_line [1];; (* 输出:[1;1] *) get_next_line [1;1];; (* 输出:[1;2;1] *) get_next_line [1;2;1];; (* 输出:[1;3;3;1] *)
内容的提问来源于stack exchange,提问作者J.B
相关产品推荐
相关产品推荐

