【发布时间】:2019-07-06 19:24:32
【问题描述】:
我正在尝试使用 Ruby 的注入来对表示有限连分数的数组求和,其中
[a, b, c, d, e, ... , x] = a + 1/(b + 1/(c + 1/(d + 1/(e + ... 1/x)...)))
我不知道如何使用注入获得正确的嵌套评估以返回正确的值。
相反,我所写的只是返回项的统一总和,而不是嵌套总和。例如,
total = [0, 2, 1, 12, 8].inject do |sum,x|
sum = sum + Rational(1,x)
end
puts total
#=> 41/24
也就是说,
0 + 1/2 + 1/1 + 1/12 + 1/8 #=> 41/24
代替
0 + 1/(2 + 1/(1 + 1/(12+1/8))) #=> 105/307,这是正确的值。
是否可以使用注入方法计算这种类型的总和?
如果不是,如何正确计算?
【问题讨论】:
-
使用
inject(又名reduce)时,块变量即累加器(一般称为memo)--这里sum--分配给每一步的块计算结果。因此,您可以将sum = sum + Rational(1,x)简化为sum + Rational(1,x)。 -
这既不是这里也不是那里,但写
Rational(1, x)的更紧凑的方式是1r/x。