To start the process of a software life cycle you need requirements, in other words, what the customer ask for. Before starting the development process, you have to know what the software is going to do, and how is going to do it. Functional and nonfunctional requirements answer those questions.
To be more precise, in software engineer, functional requirements define the functions of the system, is the description of the feature required. It also includes description of the required functions. Some examples of functional requirements are calculations, technical details, data manipulation and processing.
Functional requirements are supported by the nonfunctional requirements, which tells how you are going to make the functional requirements work. This does not mean that you will make something functional with whatever methods you have in mind; nonfunctional requirements also have detail constraints as well as what standard a function should be provided.
In the first step of the software life-cycle, like I wrote before on a previous post, you need to gather information about what the customer needs, those needs are the functional requirements, the description of the behavior of the system. Then, nonfunctional requirements are things that can be measured about the system.
It describes aspects of the system that don’t relate to its execution, but rather to its evolution over time (e.g. maintainability, documentation, etc).
From stack overflow