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

编写符合指定规则的Haskell递归函数makeString

递归Haskell函数makeString实现方案

没问题,我来帮你搞定这个递归函数。先拆解需求的核心逻辑,再一步步构建递归解法:

核心规则回顾

  • 当n <= 0时,返回空字符串""
  • 当n为正整数时:
    • 字符串总长度为3n-2
    • 包含恰好n个ch1字符
    • 每两个ch1之间用两个ch2字符分隔

递归思路拆解

递归的关键是把大问题拆成更小的子问题:

  1. 边界条件:n <= 0直接返回空;n=1时不需要分隔符,直接返回单个ch1
  2. 递归步骤:对于n > 1的情况,字符串可以拆成:[ch1] ++ [ch2, ch2] ++ makeString (n-1) ch1 ch2——也就是先放第一个ch1,加两个分隔符,再拼接n-1个ch1组成的符合规则的字符串。这样每一层递归都会补充一个ch1和对应的分隔符,直到触达n=1的边界。

最终代码实现

makeString :: Int -> Char -> Char -> String
makeString n ch1 ch2
  | n <= 0    = ""
  | n == 1    = [ch1]
  | otherwise = ch1 : ch2 : ch2 : makeString (n-1) ch1 ch2

这里用:操作符而不是++是因为列表的:是O(1)的高效操作,比O(n)的++更适合递归场景,性能更好。

测试验证

你可以用这些案例验证函数行为:

-- 边界情况
makeString 0 'a' 'b' == ""  -- 结果为True

-- n=1的情况
makeString 1 'x' 'y' == "x"  -- 结果为True

-- n=2的情况(长度3*2-2=4)
makeString 2 'a' '-' == "a--a"  -- 结果为True

-- n=3的情况(长度3*3-2=7)
makeString 3 '#' '*' == "#**#**#"  -- 结果为True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:22:05