Also, of course, one name for the fundamental unit of modularity in a computer program, also called subroutine or procedure. Externally, a function is known by a name, accepts zero or more arguments or parameters describing the data it is to do its work on, and returns a value reporting the result. (The analogy with mathematical functions is clear.) Ideally, a function implements an abstraction, in a black box way: it performs some useful service, but you don't know (and don't care) how it does it. Theoretically, it should always be possible to rewrite the internal implementation of a function -- to fix a bug, or improve performance, or add a feature -- and, as long as the parameter list doesn't change, for the rewrite to be transparent to the function's callers, such that none of them have to make any corresponding changes themselves.

Examples (suggested by wharfinger):

A C function to return the average of two numbers:

int average(int a, int b)
{
return (a + b) / 2;
}

A Pascal function for computing the greatest common divisor (from Jensen & Wirth, Pascal: User Manual and Report, 2/E, p. 82):

function gcd(m,n: integer):integer;
begin if n=0 then gcd := m
else gcd := gcd(n,m mod n)
end;