编写符合指定规则的Haskell递归函数makeString
递归Haskell函数
makeString实现方案 没问题,我来帮你搞定这个递归函数。先拆解需求的核心逻辑,再一步步构建递归解法:
核心规则回顾
- 当
n <= 0时,返回空字符串"" - 当
n为正整数时:- 字符串总长度为
3n-2 - 包含恰好
n个ch1字符 - 每两个
ch1之间用两个ch2字符分隔
- 字符串总长度为
递归思路拆解
递归的关键是把大问题拆成更小的子问题:
- 边界条件:
n <= 0直接返回空;n=1时不需要分隔符,直接返回单个ch1 - 递归步骤:对于
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
相关产品推荐
相关产品推荐

