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

Haskell如何遍历数字范围并生成指定偶数列表?

用递归实现Haskell的偶数范围筛选函数

首先明确Haskell里的函数签名应为 foo :: Int -> Int -> [Int](Haskell的列表语法是[Int]而非Int[])。递归实现的核心是确定基线条件和递归步骤:

基础递归实现(逐个检查)

思路直接:从startNum开始逐个遍历到endNum,判断每个数是否为偶数,符合条件就加入结果列表,直到遍历超出范围。

foo :: Int -> Int -> [Int]
foo startNum endNum
  -- 基线条件:当前数超过endNum,返回空列表终止递归
  | startNum > endNum = []
  -- 当前数是偶数,将其加入结果,继续递归下一个数
  | startNum `mod` 2 == 0 = startNum : foo (startNum + 1) endNum
  -- 当前数不是偶数,直接递归处理下一个数
  | otherwise = foo (startNum + 1) endNum

测试示例:foo 5 10 会返回 [6,8,10],完全符合需求。

优化版递归(直接遍历偶数)

上面的实现会逐个检查每个数,我们可以优化:先找到第一个大于等于startNum的偶数,之后每次直接加2递归,减少不必要的判断:

foo :: Int -> Int -> [Int]
foo startNum endNum = 
  let firstEven = if startNum `mod` 2 == 0 then startNum else startNum + 1
  in if firstEven > endNum 
     then [] 
     else firstEven : foo (firstEven + 2) endNum

这个版本效率更高,尤其在范围很大时优势明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:06:29