Od strony matematycznej: funkcja to pewne przyporządkowanie wszystkim elementom z pewnego zbioru (zwanego dziedziną) elementów jakiegoś zbioru (zwanego przeciwdziedziną). Weźmy na przykład funkcję f: {1, 2, 3} -> {1, 2}, którą definiujemy w sposób następujący: f(1) = 1, f(2) = 1, f(3) = 2. I oto jest - funkcja. Możemy też oczywiście nie wykorzystywać wszystkich elementów z przeciwdziedziny, na przykład: f(1) = f(2) = f(3) = 1. Oczywiście samo zagadnienie funkcji jest bardziej rozbudowane (jak zapewne się domyślasz), ale myślę, że tyle wystarczy, by zbudować sobie małą intuicję.
Co do programowania: funkcje to taki podprogram, który wykonuje jakąś określoną operację. Może mieć typ zwracany (ale nie musi, na przykład void), tak samo może przyjmować argumenty (tak jak funkcje, które znamy w matematyce), ale oczywiście nie musi ich przyjmować. Intuicyjnie rzecz biorąc można sobie wyobrazić, że funkcja ma za zadanie "coś wykonać" w programie, na przykład obliczyć sumę argumentów, albo ich iloczyn (to takie najprostsze przykłady).