Both fold a sequence element-by-element, carrying forward accumulated state. reduce() builds a result by folding with a function YOU define; an RNN folds with a learned cell.