我用binet的公式计算斐波纳契数,而我在划分红宝石方面遇到了麻烦。我已经尝试过输入数字to_f等无济于事。我会告诉你哪些有效,哪些无效,那么也许你可以告诉我原因。
以下不起作用
n=5
fib=(1 + sqrt(5))**n - (1-sqrt(5))**n / (2**n * sqrt(5))
puts fib #outputs 354.9257634247335 which is a bunch of garbage
我也试过
n=5
fib=((1 + sqrt(5))**n).to_f - ((1-sqrt(5))**n).to_f / (2**n * sqrt(5)).to_f
puts fib #outputs the exact same thing as above
但以下作品
n=5
fib1=(1 + sqrt(5))**n - (1-sqrt(5))**n
fib2=(2**n * sqrt(5))
fib = fib1/fib2
puts fib.round(0) #outputs 5 which is correct
为什么前两个例子失败但后者给了我想要的东西?真是令人气愤!
答案 0 :(得分:2)
您的操作顺序有问题。除法具有更高的优先级,因此在前两个示例中,只有第二个数字被划分。
您需要在分子周围添加一个括号,以确保在分割之前对两个部分进行子跟踪。
答案 1 :(得分:1)
您缺少括号
fib=((1 + sqrt(5))**n - (1-sqrt(5))**n) / (2**n * sqrt(5))
=> 5.000000000000001