所以我有一个程序,目前发现斐波纳契相当于用户输入的值,例如: 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开始,那也非常感激。
提前感谢您的帮助。
答案 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,前者更为惯用。
此外,您可能需要考虑在此处理负输入,因为这会引发错误。