检查输入是否是斐波纳契数

时间:2013-02-14 00:40:58

标签: smlnj ml

fun isfib(a) =
   findfib(a,1,1)

and
findfib(b,x,y) =
   val z = x + y
   if b <= 1 then true
   else if z > b then false
   else if z = b then true
   else fib(b,y,z)

我正在向程序中输入一个输入,并递归地试图找出这个输入是否是一个fib数。 我可以在2行中的单独程序中计算fib的第x位。但是这种“输入,检查是否等于无效,对于无限或无效的虚拟”逻辑对我来说是非常困惑的。我也遇到了错误,例如在第7.1行“替换AND ANDAL ANDAL”和“插入ORELSE”,这是B&lt; = 1

1 个答案:

答案 0 :(得分:0)

我的意思是你应该在你需要相互递归的情况下使用and,在这种情况下你似乎并不真的这样做,例如,你可以尝试这样的事情:

fun fib 0 = 1
    | fib 1 = 1
    | fib n = (fib (n-1)) + (fib (n-2));

fun isfib a = 
    let
        fun eval a b = if a = (fib b) then true else if a < (fib b) then false else eval a (b+1)
    in
        eval a (1)
end;

尝试运行isfib 5isfib 6。无需无限。

相关问题