如何在 F# 中打印出整个斐波那契数列直到用户输入的值?
How do I print out the entire Fibonacci sequence up to a user inputted value in F#?
所以我有一个程序,目前可以找到用户输入值的斐波那契等价物,例如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 开始,那也将不胜感激。
提前感谢您的帮助。
看看 link s952163 在评论中给你的 - 它展示了使用 Seq 表达式生成斐波那契数列的方法,并解释了为什么这些是有用的。
以下将打印一个序列,直到指定的序列号:
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,前者更地道。
此外,您可能需要考虑在此处处理负输入,因为它们会引发错误。
所以我有一个程序,目前可以找到用户输入值的斐波那契等价物,例如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 开始,那也将不胜感激。
提前感谢您的帮助。
看看 link s952163 在评论中给你的 - 它展示了使用 Seq 表达式生成斐波那契数列的方法,并解释了为什么这些是有用的。
以下将打印一个序列,直到指定的序列号:
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,前者更地道。
此外,您可能需要考虑在此处处理负输入,因为它们会引发错误。