Haskell, 37 36 bytes
import Data.Ratio
foldr1$(.(1/)).(+)
This uses Haskell's Ratio
type with it's native representation, i.e. a %
between the numerator and denominator. Usage example:
Prelude> ( foldr1$(.(1/)).(+) ) [4%1,2,1,3,1,2]
170 % 39
If you don't like Ratio
s in the input (4%1
in the example above) you have to explicitly convert the input list for additional 9 bytes: foldr1((.(1/)).(+)).map(%1)
.
Edit: @Lynn saved a byte. Thanks!