当前位置:  开发笔记 > 后端 > 正文

为什么我感觉我的F#代码可能更简洁

如何解决《为什么我感觉我的F#代码可能更简洁》经验,为你挑选了1个好方法。



1> Gus..:

您可以对代码应用许多直接简化,但我不认为这是最好的方法.

这是我在F#中解决这个问题的方法:

let rec tryDivide n m =
    if m = 1 then true
    else
        if n % m = 0 then tryDivide n (m-1)
        else false

let rec findIt i m =
    if tryDivide i m then i
    else findIt (i+1) m

findIt 1 20

它比你的慢一点,因为它不使用硬编码的素数,它们是在运行中计算的,但是我的计算机上仍需要不到2秒的时间才能得到正确的答案.

请注意,我没有使用任何类似列表的数据结构,也不需要在这个特定问题中依赖大整数.

UPDATE

这是基于Kvb提出的解决方案的更好方法:

let rec gcd x y = if y = 0 then abs x else gcd y (x % y)

let lcm a b = 
    match (a, b) with
    | (_, 0) | (0, _) ->  0
    | (x, y) -> abs ((x / (gcd x y)) * y)

Seq.fold lcm 1 {2..20}


当然,也有简单的但不是穷举的方式来解决这个问题(例如`List.fold LCM 1 [2..20]`一个计算两个整数的最小公倍数一个适当定义的`lcm`函数立即有效地返回正确的结果).
推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有