如何将整个Fibonacci序列打印到F#中用户输入的值?

时间:2016-09-14 02:22:19

标签: f# sequence fibonacci

所以我有一个程序,目前发现斐波纳契相当于用户输入的值,例如: 6将是5(或13取决于你是否从0开始)。我个人更喜欢以0开头的序列。

    open System

    let rec fib (n1 : bigint)  (n2 : bigint) c =
        if c = 1 then
            n2
        else
            fib n2 (n1+n2) (c-1);;

    let GetFib n =
        (fib 1I 1I n);;

    let input = Console.ReadLine()
    Console.WriteLine(GetFib (Int32.Parse input))

问题在于它所做的只是找到序列中的等价数字。我试图让它打印出所有值,直到该用户输入的值,例如6将打印出0,1,1,2,3,5。如果有人能帮我弄清楚如何打印整个序列,那将非常有帮助。此外,如果有人可以查看我的代码并告诉我如何在打印完整个序列时从0开始,那也非常感激。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

看一下s952163在评论中给你的链接 - 它显示了使用Seq表达式生成fibonnaci序列的方法,并解释了为什么这些有用。

以下将打印序列,直到指定的序列号:

let fibsTo n = Seq.unfold (fun (m,n) -> Some (m, (n,n+m))) (0I,1I)  
              |>Seq.takeWhile (fun x -> x <= n)

let input = Console.ReadLine()

(fibsTo  (Numerics.BigInteger.Parse input))|>Seq.iter(printfn "%A")

注意使用printfn而不是console.writeline,前者更为惯用。

此外,您可能需要考虑在此处理负输入,因为这会引发错误。