2 of 3 added 44 characters in body

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 Ratios 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!