In computer science, functional programming is a programming paradigm—a style of building the structure and elements of computer programs—that treats computation as the evaluation of mathematical functions and avoids changing-state and mutable data.

Functional ProgrammingOOP
Uses Immutable data.Uses Mutable data.
Follows Declarative Programming Model.Follows Imperative Programming Model.
Focus is on: “What you are doing”Focus is on “How you are doing”
Supports Parallel ProgrammingNot suitable for Parallel Programming
Its functions have no-side effectsIts methods can produce serious side effects.
Flow Control is done using function calls & function calls with recursionFlow control is done using loops and conditional statements.
It uses “Recursion” concept to iterate Collection Data.It uses “Loop” concept to iterate Collection Data. For example: For-each loop in Java
Execution order of statements is not so important.Execution order of statements is very important.
Supports both “Abstraction over Data” and “Abstraction over Behavior”.Supports only “Abstraction over Data”.

Functional programming languages are specially designed to handle symbolic computation and list processing applications. Functional programming is based on mathematical functions. Some of the popular functional programming languages include: Lisp, Python, Erlang, Haskell, Clojure, etc.

Source: https://en.wikipedia.org/wiki/Functional_programming