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

求助:用递归实现Haskell函数获取n二进制中2^k位的数字

实现思路与代码

首先需要修正函数类型——我们需要接收两个自然数参数(n和k),所以正确的类型签名应为:

Stelle :: Int -> Int -> Int

递归逻辑与起始条件

递归的核心是逐步缩小问题规模,结合div和mod的二进制特性(除以2等价于二进制右移一位,取模2等价于取二进制最低位):

  • 起始条件1:当n == 0时,无论k取值多少,直接返回0(因为0的二进制所有高位都是0)
  • 起始条件2:当k == 0时,返回n mod 2(二进制第0位就是原数的奇偶性)
  • 递归步骤:当k > 0时,将n除以2(右移一位),递归求解Stelle (n div 2) (k-1)——此时原数的第k位就变成了新n的第k-1位

完整代码

Stelle :: Int -> Int -> Int
Stelle 0 _ = 0
Stelle n 0 = n `mod` 2
Stelle n k = Stelle (n `div` 2) (k - 1)

示例验证

  • Stelle 5 0 → 返回1(5的二进制是101,第0位为1)
  • Stelle 5 1 → 递归调用Stelle 2 0,返回0(第1位为0)
  • Stelle 5 2 → 递归到Stelle 1 0,返回1(第2位为1)
  • Stelle 3 2 → 递归到Stelle 0 0,返回0(3的二进制是11,第2位为0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:05:15