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

F#中如何处理seq<seq<int>>,获取各Collatz序列的停止时间

解决嵌套Collatz序列的停止时间计算问题

你需要对嵌套序列中的每一个子序列单独调用Seq.findIndex,而非直接在外层序列上使用。原代码失败的原因是:collatzSequences是seq<seq<int>>类型,Seq.findIndex参数函数里的i是一个子序列(seq<int>),无法直接和整数1做比较。

具体实现步骤

  1. 先定义一个计算单个Collatz序列停止时间的函数:
let getStoppingTime collatzSeq =
    // 找到序列中首次出现1的索引
    collatzSeq |> Seq.findIndex (fun num -> num = 1)
  1. 对嵌套序列使用Seq.map,逐个处理每个子序列:
// 得到所有正整数对应的Collatz序列停止时间组成的序列
let allStoppingTimes = collatzSequences |> Seq.map getStoppingTime

验证示例

比如单独计算初始值为5的序列停止时间:

collatz 5 |> getStoppingTime // 返回5,因为序列是5→16→8→4→2→1,1在索引5的位置

allStoppingTimes会依次生成初始值1、2、3...对应的停止时间:

  • 初始值1的序列:[1;4;2;1;...],首次1在索引0,所以第一个元素是0
  • 初始值2的序列:[2;1;4;2;...],首次1在索引1,所以第二个元素是1
  • 以此类推

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:21:32