Żeby to łatwo zrozumieć musisz sobie zawsze rozpisywać po kolei co, kiedy i dla czego. W przypadku sumowania "a" pierwszych wyrazów trzeba się zastanowić jaki jest początkowy wyraz. Jest nim liczba 1 więc suma np. 3 pierwszych liczb to 1+2+3=6. Podając funkcji argument podajesz na którym stopniu takiej drabinki stoisz. Poprzedni stopień zawsze jest równy sumie n-1 a obecny (n-1)+n. Żeby obliczyć n-1 musisz spowrotem wywołać funkcje itd.
Moze to troche zagmatwałem ale na przykładzie: Funkcja dostaje argument 3, sprawdza czy jest równy 1 (najmniejszej możliwej wartości/wartości początkowej), jeśli jest to zwraca (return) właśnie tą liczbe czyli w tym przypadku jeden, jeśli nie jest równe 1 to (else) wywołuje samą siebie żeby obliczyć 3-1 czyli jako argument podaje właśnie 2.
Dla 2 funkcja dalej będzie musiała wywołać samą siebie ale już dla 2-1 czyli 1. Teraz zostaje spełniony warunek (if funkcji) ponieważ 1=1 i funkcja zwraca wartość 1, niby nic ale zwrócona wartość jest podstawiana wyzej ( w lini "else return funkcja(n-1)+n") i zwraca wartość 1+2 czyli 3, zwrócona wartość podstawiona jest wyżej i pętla zwraca końcową wartość czyli 3+3=6 dla trzeciego wyrazu ciągu zaczynajacego się od 1.
int suma ( int a ){
if ( a==1 ) return 1;
else return suma ( a-1 )+a;
}